Visual Studio 中的 Cmake 项目无法再找到标准库

Cmake project in visual studio can't find standard libraries anymore

提问人:DangerDaisy 提问时间:7/10/2021 最后编辑:DangerDaisy 更新时间:10/27/2021 访问量:1354

问:

更新 1:我启动了一个新项目,该项目使错误返回,并创建了一个额外的错误:

C1034: iostream: no include path set

更新 2:我通过在顶级 CMakeList 中包含以下内容来解决问题

if(WIN32)
    include_directories(
        "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.29.30037\\include"
        "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.19041.0\\ucrt"
    )
    link_directories(
        "C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.19041.0\\um\\x64"
        "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.29.30037\\lib\\onecore\\x64"
        "C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.19041.0\\ucrt\\x64"
    )
endif()

不过,我还不想将其标记为解决方案。因为我发现所有这些额外的搜索都是完全不可接受的,以使一个项目在一个真正应该是一种安装和开始的程序中工作,并希望找到一个更好的解决方案,而不是将这个片段复制到我的所有项目或实际问题中。


我昨天安装了VS2019,并编译了一个小小的测试程序,它只是在控制台上写了一个数字。

这是我的主 .cpp 文件的内容

#include <iostream>
#include <iomanip> // Included to test whether including other libs did work.

#include "Graphics/window.hpp"

int main()
{
    std::cout << "Width: "  << std::endl;
    std::cout << "Height: " << std::endl;

    return 0;
}

昨天它工作得很好,但是当我在包含 GLFW 后打开项目时,它停止能够找到 iostream 库并显示以下错误:

Error (active)  E0135   namespace "std" has no member "endl"    Slash.exe (source\Slash.exe) - x64-Debug    C:\Users\Daisy\source\repos\CMakeProject1\source\main.cpp   9   
Error (active)  E0135   namespace "std" has no member "endl"    Slash.exe (source\Slash.exe) - x64-Debug    C:\Users\Daisy\source\repos\CMakeProject1\source\main.cpp   10  
Error (active)  E0135   namespace "std" has no member "cout"    Slash.exe (source\Slash.exe) - x64-Debug    C:\Users\Daisy\source\repos\CMakeProject1\source\main.cpp   9   
Error (active)  E0135   namespace "std" has no member "cout"    Slash.exe (source\Slash.exe) - x64-Debug    C:\Users\Daisy\source\repos\CMakeProject1\source\main.cpp   10  
Error (active)  E1696   cannot open source file "iostream"  Slash.exe (source\Slash.exe) - x64-Debug    C:\Users\Daisy\source\repos\CMakeProject1\source\main.cpp   1   
Error (active)  E1696   cannot open source file "iomanip"   Slash.exe (source\Slash.exe) - x64-Debug    C:\Users\Daisy\source\repos\CMakeProject1\source\main.cpp   2   
Error   C1083   Cannot open include file: 'iostream': No such file or directory C:\Users\Daisy\source\repos\CMakeProject1\out\build\x64-Debug\CMakeProject1 C:\Users\Daisy\source\repos\CMakeProject1\out\source\main.cpp   1   

以下是相关的 CMake 文件

项目根目录

cmake_minimum_required (VERSION 3.19)

project(Slash)

set(CMAKE_RUNTIME_OUTPUT_DIR ${PROJECT_SOURCE_DIR}/bin)

add_subdirectory(source)

项目根/源

add_subdirectory(Graphics)

add_executable (${CMAKE_PROJECT_NAME} main.cpp)

target_include_directories(${CMAKE_PROJECT_NAME}
PUBLIC
    Graphics/include
)

target_link_libraries(${CMAKE_PROJECT_NAME}
    Graphics
)

项目根目录/源/图形

add_library(Graphics
    ${CMAKE_CURRENT_LIST_DIR}/src/window.cpp
)

target_include_directories(Graphics
PUBLIC
    ${CMAKE_CURRENT_LIST_DIR}/include/Graphics
)

我也尝试过不再包含 GLFW,但这也无济于事。 (如果很重要:我通过使用它附带的 CMAKE 文件并使用 add_subdirectory() 命令来包括 GLFW。

我已经研究了手动包含标准库,但我在机器上的任何地方都找不到它们。我只是觉得 CMake 无法再找到这些文件很奇怪。

我还尝试将其他标准库包含在 samae 结果中,以确保不仅仅是 iostream 给我带来麻烦。

我正在使用库存的 C++ 桌面工作负载,并选择了所有默认组件,以防万一出现问题。

我之前在尝试使用不同的编译器和构建系统在 Windows 上设置我的 C++ 工具时遇到了类似的问题,所以我认为这与 CMake 有关。

提前感谢您的任何建议。

C 工作室 可视化 CMake C++ 标准库

评论

3赞 Tsyvarev 7/10/2021
“如果很重要:我通过使用它附带的 CMAKE 文件并使用 GLFW 来包含 GLFW......” - 不要描述代码。相反,将代码本身 () 添加到问题帖子中。此外,将代码的图像(C++ 图像)替换为代码的文本表示形式。关于错误消息也是如此。请注意,Stack Overflow 不鼓励将图像用于代码和错误消息。另请参阅如何提问CMakeLists.txt
0赞 drescherjm 7/10/2021
错误消息似乎是 Windows SDK 的问题。
0赞 DangerDaisy 7/10/2021
公平点。我已经坚持了一段时间,再加上我失败的鼠标垫,不允许我选择文本,导致我跳过了正确的格式。我已经按照建议更新了问题。
0赞 DangerDaisy 7/10/2021
我还检查了 Windows SDK。当前安装的版本是“Windows 10 SDK (10.0.19041.0)”。这是 VS 安装程序默认选择的那个。
0赞 DangerDaisy 7/11/2021
我很遗憾地说,重新启动后,它突然决定再次开始工作,而我没有对我的电脑或项目进行任何更改。我希望有比“重新启动并希望最好的”更实质性的解决方案。

答:

0赞 Stanley Jointer II 10/27/2021 #1

这是我今天早上刚刚发现的一个适当的答案,我认为可以解释你的困境:

根据 Microsoft 的 文档, 您无法从弹出的“最近打开”对话框中打开 CMake 项目 当 Visual Studio 启动时启动,或者出于某种愚蠢的原因,CMake 启动 文件未正确读取。您需要从“文件”|”打开 |CMake...,然后浏览到项目的根目录并选择要打开的 CMake 文件。

我知道这不是一个令人满意的答案,但这是我发现的唯一一个可以解释为什么 Cmake 项目一次有效而下一次没有成功。上面的链接还描述了如何“以 Microsoft 方式”创建 CMake 项目,我也理解并同意这同样令人反感。

对不起,朋友。