首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >visual studio中的Cmake项目再也找不到标准库了

visual studio中的Cmake项目再也找不到标准库了
EN

Stack Overflow用户
提问于 2021-07-10 12:04:17
回答 1查看 867关注 0票数 0

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

代码语言:javascript
复制
C1034: iostream: no include path set

更新2:我在顶级CMakeList中包含了以下内容,从而解决了这个问题

代码语言:javascript
复制
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,并编译了一个小测试程序,它只是将一个数字写入控制台。

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

代码语言:javascript
复制
#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库,并显示了以下错误:

代码语言:javascript
复制
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文件

工程根

代码语言:javascript
复制
cmake_minimum_required (VERSION 3.19)

project(Slash)

set(CMAKE_RUNTIME_OUTPUT_DIR ${PROJECT_SOURCE_DIR}/bin)

add_subdirectory(source)

项目根/源

代码语言:javascript
复制
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
)

项目根/源/图形

代码语言:javascript
复制
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++桌面工作负载,并选择了所有默认组件,以防出现问题。

在尝试用不同的网络编译器和构建系统在C++上设置CMake工具时,我曾经遇到过一个简单的问题,所以我认为这只是与CMake有关。

谢谢您的建议。

EN

回答 1

Stack Overflow用户

发布于 2021-10-27 13:44:31

以下是我今天早上刚刚发现的一个恰当的答案,我认为这也许可以解释你的两难处境:

对于每个

,您不能从Visual启动时弹出的打开的最近对话框中打开CMake项目,或者,由于一些愚蠢的原因,CMake文件无法正确读取。您需要从CMake文件中打开一个项目: open. ,然后浏览到项目的根目录并选择要打开的CMake文件。

我知道这不是一个令人满意的答案,但这是我找到的唯一一个解释为什么一个Cmake项目一次成功而下一次没有工作的原因。上面的链接还描述了如何创建一个CMake项目“Microsoft”,我也理解并同意这一点同样令人讨厌。

对不起朋友。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68327539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档