簡體   English   中英

Visual Studio 中的 Cmake 項目再也找不到標准庫了

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

更新 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,編譯了一個小測試程序,只向控制台寫入一個數字。

這是我的 main.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 相關。

在此先感謝您的任何建議。

這是我今天早上剛剛發現的一個合適的答案,我認為可以解釋您的困境:

根據Microsoft 的文檔,您無法從 Visual Studio 啟動時彈出的最近打開的對話框中打開 CMake 項目,或者由於某些愚蠢的原因,無法正確讀取 CMake 文件。 您需要從File |打開一個 CMake 項目打開 | CMake... ,然后瀏覽到項目的根目錄並選擇要打開的 CMake 文件。

我知道這不是一個令人滿意的答案,但這是我發現的唯一一個解釋為什么 Cmake 項目一次有效而下一次無效的答案。 上面的鏈接還描述了如何以“Microsoft 方式”創建 CMake 項目,我也理解並同意同樣令人反感。

對不起朋友。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM