[英]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_DIR , target_include_directories和add_subdirectory
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.