プロジェクトは、おおよそ次のような構造になっています。
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' に含まれるビルド ディレクトリに次のように生成されます。
#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
(実際、これは私が現在行っている方法です)、それは受け入れられません。すべてのサブディレクトリが親のファイルを参照し、最終的にファイル名の衝突につながる可能性があります。
大規模なプロジェクトで、人々はこれをどのように克服しますか? または多分私は何か間違ったことをしていますか?