我在一个更大的项目中遇到了这个问题,但我用一个快速拼凑的例子重现了它。 Visual Studio 使用 CMake 正确生成所有内容,如果我然后转到工具栏并选择
Build -> Build All
它将成功编译和链接所有内容,并且我可以从 powershell 运行生成的可执行文件...... CMake 的输出显示为:
根据 Visual Studio CMake 文档 我应该看到另外一行说明:
Target info extraction done.
。我相信这是我问题的核心,但我不确定为什么它没有发生,因为其他一切似乎都正常。
如果我尝试从 Visual Studio 本身运行(或调试)任何东西,它只是说我需要选择一个“启动项”,但没有一个可用:
在这里查看Visual Studio CMake 文档,我应该能够简单地转到解决方案资源管理器中的 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,但没有任何帮助。
看完我所有的
CMakeLists.txt
后,我意识到问题是我包括了set(CMAKE_BUILD_TYPE Release)
这行。当我第一次将我的代码从 Linux 移植到 Windows 时,我最初已经包含了它,并试图强制 Visual Studio 构建一个发布版本(因为我不确定 Viusual Studio 一开始是如何工作的)。我错误地把它留在里面了,所以即使 Visual Studio 被配置为编译调试版本,CMake 配置也不会导出任何将 CMAKE_BUILD_TYPE
设置为 RELEASE
的目标(无论如何,它不应该是).
删除那条线已经解决了我所有的问题。我在互联网上多次看到此类问题弹出窗口,我想知道这是否是问题所在。我现在认识到这是一个糟糕的问题,因为我自己对 Visual Studio 的误解,但我会留下这个答案,希望它能帮助其他可能刚刚开始使用 Visual Studio 并可能遇到类似问题的人问题。