尝试添加包含作为目标源的一部分:
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查找文件?
答案 0 :(得分:1)
当 header 文件被指定为 source 一个文件时(在target_sources
,add_executable
或add_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)