我被分配到完全运行使用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