3 回答
TA貢獻1876條經驗 獲得超5個贊
必須做兩件事。
首先添加要包含的目錄:
target_include_directories(test PRIVATE ${YOUR_DIRECTORY})
如果您在沒有支持的情況下遇到非常舊的CMake版本(2.8.10或更早版本)target_include_directories,您也可以使用舊版include_directories:
include_directories(${YOUR_DIRECTORY})
然后,您還必須將頭文件添加到當前目標的源文件列表中,例如:
set(SOURCES file.cpp file2.cpp ${YOUR_DIRECTORY}/file1.h ${YOUR_DIRECTORY}/file2.h)
add_executable(test ${SOURCES})
這樣,頭文件將在Makefile中顯示為依賴項,例如在生成的Visual Studio項目中,如果生成一個。
如何將這些頭文件用于多個目標:
set(HEADER_FILES ${YOUR_DIRECTORY}/file1.h ${YOUR_DIRECTORY}/file2.h)
add_library(mylib libsrc.cpp ${HEADER_FILES})
target_include_directories(mylib PRIVATE ${YOUR_DIRECTORY})
add_executable(myexec execfile.cpp ${HEADER_FILES})
target_include_directories(myexec PRIVATE ${YOUR_DIRECTORY})
TA貢獻1820條經驗 獲得超9個贊
如果將CMake與其他創建Makefile的方法(例如make或qmake)進行比較,則CMake更像是一種腳本語言。它不像Python那么酷,但仍然如此。
如果在各種開源項目中查看人們如何包含目錄,就沒有像“ 正確的方法 ” 這樣的東西。但有兩種方法可以做到這一點。
粗體include_directories會將目錄附加到當前項目以及您將通過一系列add_subdirectory命令追加的所有其他后代項目。有時人們會說這種做法是遺留的。
更優雅的方法是使用target_include_directories。它允許為特定項目/目標附加目錄,而不會(可能)不必要的繼承或各種包含目錄的沖突。還允許執行甚至是微妙的配置,并為此命令附加以下標記之一。
PRIVATE - 僅用于此指定的構建目標
PUBLIC - 將其用于指定目標和與此項目鏈接的目標
接口 - 僅用于與當前項目鏈接的目標
PS:
這兩個命令都允許將目錄標記為SYSTEM,以提示指示目錄將包含警告不是您的業務。
類似的答案是其他命令對target_compile_definitions / add_definitions, target_compile_options / CMAKE_C_FLAGS
- 3 回答
- 0 關注
- 13149 瀏覽
添加回答
舉報
