项目大致有以下结构:
include/
lib_name/
public_foo.h
public_bar.h
src/
CMakeLists.txt
foo.c
foo.h
bar.c
bar.h
CMakeLists.txt
顶层CMakeLists.txt
文件定义了一个共享库目标
add_library(lib_name SHARED "src/foo.c" "src/bar.c")
同时,还有一个自定义命令
add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/src/foo-impl.c" ...)
foo-impl.c
在 `foo.c' 包含的 build 目录中生成,如下所示:
#include <some_header.h>
#include <other.h>
#include "foo-impl.c"
为了能够包括foo-impl.c
我在src/CMakeLists.txt
include_directories("${CMAKE_CURRENT_BINARY_DIR}")
看起来它应该工作,对吧?
好吧,它不起作用 - 该src
目录没有添加到foo.c
. 似乎包含目录仅影响在同一目录(或子目录)中定义的目标。
我知道我能做到
include_directories("${CMAKE_CURRENT_BINARY_DIR}/src")
从根目录开始CMakeLists.txt
(事实上,我现在就是这样做的),但这是不可接受的:每个子目录都会看到父目录的文件,这最终会导致文件名冲突。
人们如何在大型项目中克服这一点?或者我做错了什么?