工作,該項目已大致有以下幾種結構:包括CMAKE_CURRENT_BINARY_DIR不適用於子目錄
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.c」包括:
#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目錄隻影響在同一目錄(或子目錄)中定義的目標。
我知道我可以做
include_directories("${CMAKE_CURRENT_BINARY_DIR}/src")
從根CMakeLists.txt
(其實,這是我正在做的時刻),但是這是不能接受的:每一個子目錄將看到父母的文件和這最終可能導致文件名衝突。
人們在大型項目中如何克服這一點?或者我做錯了什麼?