我在一个更大的项目中遇到了这个问题,但我用一个快速组合的示例重现了它。Visual Studio使用CMake正确地生成了所有内容,如果我然后转到工具栏并选择Build -> Build All
,它将成功地编译并链接所有内容,我可以从powershell运行生成的可执行文件... CMake的输出如下所示:
根据Visual Studio CMake documentation,我应该看到一个附加行,说明:我相信这是我问题的核心,但我不确定为什么它没有发生,因为其他一切似乎都工作正常。
如果我尝试从Visual Studio本身运行(或调试)任何东西,它只会说我需要选择一个"启动项",但没有可用的:
看看这里的Visual Studio CMake documentation,我应该能够简单地转到解决方案资源管理器中的CMake目标视图,并看到我的所有目标,但我没有看到任何目标:
虽然我应该看到(在这个非常简单的例子中)hello
的目标,但我有以下CMake结构:
根CMakeLsits.txt
文件:
cmake_minimum_required(VERSION 3.9)
project(vira LANGUAGES CXX VERSION 0.9)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
set(CMAKE_BUILD_TYPE Release)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
add_subdirectory(src)
src/CMakeLists.txt
:
add_executable(hello hello.cpp)
src/hello.cpp
:
#include <iostream>
int main()
{
std::cout << "hello world!\n";
return 0;
}
我已经被这件事逼疯了,因为我问过的人只是简单地重复了Visual Studio文档中的内容,然而无论是这个简单的项目,还是我正在工作的更大的实际项目,都没有出现任何CMake目标。这意味着我无法使用Visual Studio的任何调试功能,因为我无法选择启动项。
我做错了什么吗?Visual Studio至少可以清楚地识别CMakeLists.txt,因为它会自动生成所有内容,并且如果我手动转到Build -> Build All
,它会生成项目。这让我更加困惑,为什么我会遇到这种情况。
我甚至尝试从头开始重新安装Visual Studio,但没有任何帮助。
1条答案
按热度按时间z18hc3ub1#
在阅读了所有
CMakeLists.txt
之后,我意识到问题在于我包含了set(CMAKE_BUILD_TYPE Release)
行,我最初是在第一次将代码从Linux移植到Windows时包含这一行的,当时我试图强制Visual Studio构建一个发布版本(因为我一开始不确定Visumal Studio是如何工作的)。我错误地把它留在了里面,所以即使VisualStudio被配置为编译调试版本,CMake配置不会导出CMAKE_BUILD_TYPE
设置为RELEASE
的任何目标(无论如何,它不应该这样)。删除这一行已经解决了我所有的问题。我在互联网上看到过这类问题弹出很多次,我想知道是否可能是这个问题。我现在认识到这是一个糟糕的问题,由于我自己对Visual Studio的误解,但我将把这个答案留在这里,希望它能帮助其他可能刚刚开始使用VisualStudio并可能遇到类似问题的人。