私は次のCMakeの問題があります。CMakeList.txtに.cmakeファイルからのソースで変数を含める適切な方法
私のプロジェクトの構造は次のとおりです。私のlib2.cmake
で
Project
--- libs
------ lib1
---------CmakeLists.txt
------ lib2
---------lib2.cmake
---------file1.c
---------file2.c
--- src
...
私が持っている:
set(LIB2_SOURCES
file1.c
file2.c
)
をそして、私は私のLIB1 CMakeList.txt
で${LIB2_SOURCES}
を使用したい:
include(../lib2/lib2.cmake)
set(LIB1_SOURCES
....
)
add_library(media SHARED ${LIB1_SOURCES} ${LIB2_SOURCES})
しかし、このエラーが発生します:
Cannot find source file:
file1.c
私はlib2.cmake
を変更し、そのようなパス修正した場合:それは作品
set(LIB2_SOURCES
../lib2/file1.c
../lib2/file2.c
)
を。しかし、それは私にとっては良い方法ではありません。
私はlib2.cmake
をlib1
ディレクトリに移動できますが、これは私にとっては良い方法ではありません。
これを処理する適切な方法は何ですか?パスを失うことなくlib2.cmake
を含める方法はありますか?
set(LIB2_SOURCES
${CMAKE_CURRENT_LIST_DIR}/file1.c
${CMAKE_CURRENT_LIST_DIR}/file2.c
)
CMAKE_CURRENT_LIST_DIR
は、現在お使いの場合ときでProject/libs/lib2
される(処理されるファイルCMakeのを含むディレクトリです:あなたは、現在のディレクトリに依存しないパスを持つようにしたい場合は
ありがとうございます@Angew。それは私が探しているものです。私はライブラリで仕事をする方法を知っていますが、このプロジェクトではlib1の中にlib2を構築する必要があります。 – DustBG
@DustBG CMakeオブジェクトライブラリは、通常の意味でのライブラリではありません。それはあなたが指定したターゲットにリンクされるオブジェクトファイルのコレクションのCMakeの名前です。あなたの要件の詳細はわかりませんが、オブジェクトライブラリは一般に、「消費するバイナリの中に直接ソースを構築する」ことに非常に近いです。 – Angew
はい、私はあなたが何を意味するのか知っていますが、私の場合は$ {CMAKE_CURRENT_LIST_DIR}を使う方が良いです。 – DustBG