2017-08-10 1 views
2

私は次の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.cmakelib1ディレクトリに移動できますが、これは私にとっては良い方法ではありません。

これを処理する適切な方法は何ですか?パスを失うことなく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のを含むディレクトリです:あなたは、現在のディレクトリに依存しないパスを持つようにしたい場合は

答えて

2

は、絶対パスを使用します処理lib2.cmake)。

しかし、代わりにこのようなソースを定義するので、あなたもmediaライブラリにそのオブジェクトライブラリを適切CMakeLists.txtlib2を与え、それにobject libraryを定義して、追加に見たいと思うかもしれません。

+0

ありがとうございます@Angew。それは私が探しているものです。私はライブラリで仕事をする方法を知っていますが、このプロジェクトではlib1の中にlib2を構築する必要があります。 – DustBG

+1

@DustBG CMakeオブジェクトライブラリは、通常の意味でのライブラリではありません。それはあなたが指定したターゲットにリンクされるオブジェクトファイルのコレクションのCMakeの名前です。あなたの要件の詳細はわかりませんが、オブジェクトライブラリは一般に、「消費するバイナリの中に直接ソースを構築する」ことに非常に近いです。 – Angew

+0

はい、私はあなたが何を意味するのか知っていますが、私の場合は$ {CMAKE_CURRENT_LIST_DIR}を使う方が良いです。 – DustBG

関連する問題