我被分配到完全運行使用CMake的一個項目,避免多次include_directories指令。使用cmake
基本上,該項目具有超過20個模塊,並且每個模塊我創建一個文件的CMake 如:
# Module: CFS
file(
GLOB_RECURSE
files
*.c
*.cpp
)
include_directories("${PROJECT_SOURCE_DIR}/include/PEM/cfs")
include_directories("${PROJECT_SOURCE_DIR}/include/PEM/kernel2")
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
add_library(cfs ${files})
kernel2是另一模塊,並且具有其自己的CMakeFile。
現在的問題是,第三模塊:M3需要從CFS頭(這也需要從kernel2頭)
所以我基本上去:
# Module: m3
file(...)
include_directories("${PROJECT_SOURCE_DIR}/include/PEM/cfs")
add_library(m3 ${files})
target_link_library(m3 cfs)
很不幸,這是遠遠不夠的,kernel2包括文件將不會被發現時,我編譯除非我加:
include_directories("${PROJECT_SOURCE_DIR}/include/PEM/kernel2")
我做錯了嗎?也許我還應該使用add_library指令添加包含文件?
任我解釋是錯誤的或聽錯了。但由於CFS編譯並輸出一個庫文件,是不是有什麼辦法可以告訴M3使用該庫不包括kernel2頭? – Salepate
如果cfs的頭文件包含kernel2頭文件 - 沒有。如果你願意,我可以解釋爲什麼是這樣。 – arrowd
如果你不介意,我希望那樣。 – Salepate