cmake`target_sources`查找源但不查找标头

时间:2019-06-07 08:01:12

标签: cmake

尝试添加包含作为目标源的一部分:

set(MY_HEADER_FILES my_header.h)
add_library(my_lib STATIC "")
target_include_directories(my_lib PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../inc/)
target_sources(my_lib PRIVATE ${MY_SOURCE_FILES} ${MY_HEADER_FILES})

哪个抛出:

Cannot find source file: my_header.h

删除头文件的附加内容,仅保留源即可构建

target_sources(my_lib PRIVATE ${MY_SOURCE_FILES})

可能是什么问题?

我知道将包含文件作为依赖项添加确实很不错,但是我对为什么cmake似乎找不到它们感到困惑-我已经确保我添加了正确的目录(否则代码将无法编译),因此问题似乎出在target_sources中,而不是包含在include目录中,但是如果是这种情况,为什么不能cmake查找文件?

1 个答案:

答案 0 :(得分:1)

header 文件被指定为 source 一个文件时(在target_sourcesadd_executableadd_library命令中),CMake与其他来源一样,使用相同的原理来查找标题。

也就是说,include_directories不会帮助CMake查找在源列表中指定的标头。

请使用标头的绝对路径:

target_sources(my_lib PRIVATE ${MY_SOURCE_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/../inc/my_header.h)

或使用相对于当前 source binary 目录的路径:

target_sources(my_lib PRIVATE ${MY_SOURCE_FILES} ../inc/my_header.h)