Visual Studio 编译到错误的路径并在与 CMake 一起使用时尝试 运行 错误的路径
Visual Studio compiling to wrong path AND trying to run wrong path when used with CMake
我是 CMake 的新手(也是 C++ 的新手,尽管这在这里不重要),我在 Visual studio.
中使用 CMake 时遇到问题
我创建了一个目录,假设它叫做 Project
,并在其中放入一个具有以下结构的简单项目:
Project/
build/ <empty>
src/
main.cpp
CMakeLists.txt
CMakePresets.json
这些文件里面只是最基本的默认代码:
CMakeLists.txt
:
cmake_minimum_required (VERSION 3.8)
project (Project)
set (CMAKE_CXX_STANDARD 20)
set (CMAKE_CXX_STANDARD_REQUIRED True)
add_executable (Project src/main.cpp)
CMakePresets.json
(此代码只是生成的默认代码):
{
"version": 3,
"configurePresets": [
{
"name": "windows-base",
"hidden": true,
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"installDir": "${sourceDir}/out/install/${presetName}",
"cacheVariables": {
"CMAKE_C_COMPILER": "cl.exe",
"CMAKE_CXX_COMPILER": "cl.exe"
},
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
}
},
{
"name": "x64-debug",
"displayName": "x64 Debug",
"inherits": "windows-base",
"architecture": {
"value": "x64",
"strategy": "external"
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "x64-release",
"displayName": "x64 Release",
"inherits": "x64-debug",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"name": "x86-debug",
"displayName": "x86 Debug",
"inherits": "windows-base",
"architecture": {
"value": "x86",
"strategy": "external"
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "x86-release",
"displayName": "x86 Release",
"inherits": "x86-debug",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
}
]
}
src/main.cpp
:
#include <iostream>
int main() {
std::cout << "Hello, world!" << std::endl;
return 0;
}
然后,我使用 CMake 创建了一个 Visual Studio 解决方案:
C:\...\Project\build> cmake ..
这工作正常,没有任何错误,Visual Studio 可以打开解决方案。也能正确构建项目...
但是它不能运行它构建的可执行文件。成功构建项目后,它已将可执行文件写入 C:\...\Project\build\Debug\Project.exe
,但它试图打开 C:\...\Project\build\x64\Debug\ALL_BUILD
,我收到一个错误弹出窗口。
我认为这里有两处错误:
- 可执行文件应该写在
C:\...\Project\build\x64\Debug
文件夹中,而不仅仅是C:\...\Project\build\Debug
文件夹。这就是我以前使用 Visual Studio 时的工作方式,这是它试图在其中搜索的文件夹。
- 它应该搜索一个名为
Project.exe
的可执行文件,而不是一个名为 ALL_BUILD
. 的可执行文件
当我从命令行手动 运行 Project.exe
时,它工作正常。但我似乎无法正确地 Visual Studio 运行。
我在这里做错了什么,我怎样才能让它起作用?
您在解决方案资源管理器中看到了几个项目。这些项目是构建目标。默认目标是 ALL_BUILD
,构建所有配置的目标,就像 cmake --build .
那样。
在解决方案资源管理器中将所需目标设置为启动项目。这会将调试器指向 运行.
的可执行文件
默认项目设置为 ALL_BUILD
要更改 VS 生成器的默认值,请使用以下 CMake 语句:
set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT Project)
add_executable
命令后的任意位置。
我是 CMake 的新手(也是 C++ 的新手,尽管这在这里不重要),我在 Visual studio.
中使用 CMake 时遇到问题我创建了一个目录,假设它叫做 Project
,并在其中放入一个具有以下结构的简单项目:
Project/
build/ <empty>
src/
main.cpp
CMakeLists.txt
CMakePresets.json
这些文件里面只是最基本的默认代码:
CMakeLists.txt
:cmake_minimum_required (VERSION 3.8) project (Project) set (CMAKE_CXX_STANDARD 20) set (CMAKE_CXX_STANDARD_REQUIRED True) add_executable (Project src/main.cpp)
CMakePresets.json
(此代码只是生成的默认代码):{ "version": 3, "configurePresets": [ { "name": "windows-base", "hidden": true, "generator": "Ninja", "binaryDir": "${sourceDir}/out/build/${presetName}", "installDir": "${sourceDir}/out/install/${presetName}", "cacheVariables": { "CMAKE_C_COMPILER": "cl.exe", "CMAKE_CXX_COMPILER": "cl.exe" }, "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Windows" } }, { "name": "x64-debug", "displayName": "x64 Debug", "inherits": "windows-base", "architecture": { "value": "x64", "strategy": "external" }, "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug" } }, { "name": "x64-release", "displayName": "x64 Release", "inherits": "x64-debug", "cacheVariables": { "CMAKE_BUILD_TYPE": "Release" } }, { "name": "x86-debug", "displayName": "x86 Debug", "inherits": "windows-base", "architecture": { "value": "x86", "strategy": "external" }, "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug" } }, { "name": "x86-release", "displayName": "x86 Release", "inherits": "x86-debug", "cacheVariables": { "CMAKE_BUILD_TYPE": "Release" } } ] }
src/main.cpp
:#include <iostream> int main() { std::cout << "Hello, world!" << std::endl; return 0; }
然后,我使用 CMake 创建了一个 Visual Studio 解决方案:
C:\...\Project\build> cmake ..
这工作正常,没有任何错误,Visual Studio 可以打开解决方案。也能正确构建项目...
但是它不能运行它构建的可执行文件。成功构建项目后,它已将可执行文件写入 C:\...\Project\build\Debug\Project.exe
,但它试图打开 C:\...\Project\build\x64\Debug\ALL_BUILD
,我收到一个错误弹出窗口。
我认为这里有两处错误:
- 可执行文件应该写在
C:\...\Project\build\x64\Debug
文件夹中,而不仅仅是C:\...\Project\build\Debug
文件夹。这就是我以前使用 Visual Studio 时的工作方式,这是它试图在其中搜索的文件夹。 - 它应该搜索一个名为
Project.exe
的可执行文件,而不是一个名为ALL_BUILD
. 的可执行文件
当我从命令行手动 运行 Project.exe
时,它工作正常。但我似乎无法正确地 Visual Studio 运行。
我在这里做错了什么,我怎样才能让它起作用?
您在解决方案资源管理器中看到了几个项目。这些项目是构建目标。默认目标是 ALL_BUILD
,构建所有配置的目标,就像 cmake --build .
那样。
在解决方案资源管理器中将所需目标设置为启动项目。这会将调试器指向 运行.
的可执行文件默认项目设置为 ALL_BUILD
要更改 VS 生成器的默认值,请使用以下 CMake 语句:
set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT Project)
add_executable
命令后的任意位置。