使用CMake的include_directories()
命令设置包含路径(-I
)好像有些麻烦。我的项目目录如下:
Root
| - CMakeLists.txt
| - libs
| - | - CMakeLists.txt
| - | - inc
| - | - | - // lib specific includes
| - | - src
| - | - | - // lib specific sources
| - proj1
| - | - CMakeLists.txt
| - | - inc
| - | - | - // proj1 specific includes
| - | - src
| - | - | - // proj1 specific sources
根目录下的 CMakeLists.txt
文件如下:
project(ROOT)
add_subdirectory(libs)
add_subdirectory(proj1)
libs
目录下的CMakeLists.txt
文件:
project(lib)
add_library(lib STATIC ${lib_hdrs} ${lib_srcs}) // for conciseness, omitted set()
最后是在proj1
下的CMakeLists.txt
文件:
project(proj1)
include_directories("${ROOT_SOURCE_DIR}/lib/inc") # <- problem line?
add_executable(proj1 ${proj1_srcs})
target_link_libraries(proj1 lib)
目标是从libs中的源文件和头文件创建库,然后链接到proj1生成的可执行文件。Proj1有一些包含在libs中的东西,所以我需要添加用-I
使用的目录。根据文档,这就是include_directories()
应该做的事情。但是,尽管明确设置了这一点,并在其后跟随一个调试message(${INCLUDE_DIRECTORIES})
,但INCLUDE_DIRECTORIES
变量是一个空字符串,并且没有指定任何目录用于包含路径,因此我的proj1编译失败。
我还尝试删除${ROOT_SOURCE_DIR}/inc
周围的引号,看看是否有帮助,但没有成功。
include_directories("${ROOT_SOURCE_DIR}/lib/inc")
,但应该是libs
而不是lib
。而且调用 CMake 函数include_directories
并不会实际填充名为INCLUDE_DIRECTORIES
的变量。 - Fraser