簡體   English   中英

CMake 無法定位包含文件

[英]CMake is unable to locate include files

在此處輸入圖像描述

base文件夾中的CMakeLists.txt文件:

# leaf files
add_library(Account "")

target_sources(Account
  PRIVATE
        ${CMAKE_CURRENT_LIST_DIR}/Account.cpp
  PUBLIC
        ${CMAKE_CURRENT_LIST_DIR}/Account.h
        )

target_include_directories( Account
        PUBLIC
    ${CMAKE_CURRENT_LIST_DIR}
        ${CMAKE_SOURCE_DIR}/initial/initial
  )

以上生成以下構建錯誤:

====================[ Build | all | Debug ]=====================================
"C:\Program Files\JetBrains\CLion 2020.2.1\bin\cmake\win\bin\cmake.exe" --build C:\Users\pc\git\cmake_test\cmake-build-debug --target all -- -j 3
Scanning dependencies of target Account
[ 37%] Built target Initial
[ 25%] Building CXX object src/models/CMakeFiles/SavingsAccount.dir/SavingsAccount.cpp.obj
[ 50%] Building CXX object src/models/base/CMakeFiles/Account.dir/Account.cpp.obj
C:\Users\pc\git\cmake_test\src\models\SavingsAccount.cpp:6:10: fatal error: initial/initial/initial.h: No such file or directory
    6 | #include <initial/initial/initial.h>
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
C:\Users\pc\git\cmake_test\src\models\base\Account.cpp:6:10: fatal error: initial/initial/initial.h: No such file or directory
    6 | #include <initial/initial/initial.h>
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
mingw32-make[2]: *** [src\models\CMakeFiles\SavingsAccount.dir\build.make:83: src/models/CMakeFiles/SavingsAccount.dir/SavingsAccount.cpp.obj] Error 1
mingw32-make[1]: *** [CMakeFiles\Makefile2:231: src/models/CMakeFiles/SavingsAccount.dir/all] Error 2
mingw32-make[1]: *** Waiting for unfinished jobs....
mingw32-make[2]: *** [src\models\base\CMakeFiles\Account.dir\build.make:83: src/models/base/CMakeFiles/Account.dir/Account.cpp.obj] Error 1
mingw32-make[1]: *** [CMakeFiles\Makefile2:204: src/models/base/CMakeFiles/Account.dir/all] Error 2
mingw32-make: *** [makefile:103: all] Error 2

我發現當 header 文件包含在不同的父文件夾或不同父文件夾的子文件夾中時,會發生這種情況。

我該如何解決這個問題?

因為您使用的是帶有<>括號的#include指令。 明顯的問題是在這些代碼行中:

target_include_directories( Account
        PUBLIC
    ${CMAKE_CURRENT_LIST_DIR}
        ${CMAKE_SOURCE_DIR}/initial/initial #<-- here to be precise
  )

請記住,您指向的任何目錄都將被視為系統路徑。

您顯然(正如您自己所知)沒有指向正確的文件夾。 像對待任何其他編程語言一樣對待 CMake ,即試驗它並調試您使用的變量! 最簡單的調試方法是添加一個

message(STATUS  ${CMAKE_SOURCE_DIR}) 

這樣您就可以確定您是否指向正確的文件夾。 目前我假設CMAKE_SOURCE_DIR指向根文件夾(你的主要CMakeLists.txt所在的位置),因為我希望 CLion 從根CMakeLists.txt文件開始構建(否則該文件的存在將毫無意義)即源代碼樹的頂層 因此路徑應該很可能是src/正如Tsyvarev 已經指出的那樣 但是請通過調試來確認這一點。

如果您從 CLI 進行操作,這會更加明顯,但是因為您是從 CLion 運行此任務,所以您不確定CMAKE_SOURCE_DIR是什么

這是因為這取決於您從中調用cmake -B[build-folder]CWD或您在cmake -S[source_folder] -B[build_folder]中為-S標志指定的內容。

有關指定源代碼樹的更多信息,請查看此鏈接 另外檢查CMAKE_SOURCE_DIRtarget_include_directoriesadd_subdirectory

暫無
暫無

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

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