2016-11-28 8 views
0

add_subprojectで追加されたプロジェクトを互いにリンクしたいと思います。リンクCMakeサブプロジェクト

(root) 
I--exec 
    I--"some source files" 
    I--CMakeLists.txt 
I--lib 
    I--"some source files" 
    I--CMakeLists.txt 
I--CMakeLists.txt 

私はちょうどソートのワークスペースファイルとしての私のルートレベルCMakeLists.txtを持つことができるいくつかの方法があります:私はこのようなプロジェクト構造を持っていると仮定?したがって、Visual Studioの.slnのように動作しますか?

は、私はあなたに私が何を意味するかのアイデアを与えるために、これを試してみました:

明らか
cmake_minimum_required(VERSION 2.8) 
project(test) 

add_subdirectory(exec) 
add_subdirectory(lib) 

target_link_libraries(exec lib) 
target_include_directories(exec lib/include) 

、それは私が原因幹部がによって構築されていないことを行うことができない旨の、最後から二番目の行で設定エラーを投げましたこのファイル(現在のCMakeLists.txt?)。私は何をしたいのですか?

+0

***明らかに、2番目の最後の行に設定エラーがスローされました***なぜこれが失敗したのかはわかりません。私はいつもこれをやる。最近は、CMakeLists.txt以外のルートからproject()を削除しましたが、 – drescherjm

+0

*** cmake_minimum_required(バージョン2.8)*** 2.8へのサポートは本当に必要ですか? – drescherjm

+0

@drescherjmいいえ、私はちょうどメモリから任意のバージョン番号を入れません:P私は上記のファイルを実行するときに完全なログを追加することができます。おそらく同様のシナリオを試してみて、結果を教えてください。 – calcyss

答えて

2

CMake> = 2.8.10の場合、target_link_librariestarget_include_directoriesの使用が間違っています。

ターゲットSYSTEM | BEFORE | PUBLIC | INTERFACE | PRIVATEを指定する必要があります。 target_link_librariesにLINK_が付いています。ただ明確な依存関係の管理のためのサイドノート、(私見)として

ルートでtarget_link_librariestarget_include_directories何があってはならないCMakeLists.txt、彼らはサブプロジェクトにする必要があります。だからあなたのルートCMakeListsは、例えば、次のようになります。あなたの幹部で

cmake_minimum_required(VERSION 2.8) 
project(test) 

add_subdirectory(lib) 
add_subdirectory(exec) 

/CMakeLists.txt:あなたのlibに

add_executable (exec main.cpp) 

target_link_libraries (exec LINK_PUBLIC lib) 
target_include_directories (exec PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../lib) 

/CMakeLists.txt:

add_library (lib libmain.cpp) 

target_include_directories (lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) 

私は」違いがあるかどうかは分かりませんが、実行可能ファイルの前にライブラリにadd_subdirectoryを使用しています。

+0

ありがとうございます、私はすぐにこれを試してみましょう:3。私は2つのサブプロジェクトがここでお互いを知っていることを知りませんでした。私は 'target_link_libraries'を呼び出すときCMakeが' lib'について知らないことを期待しました。 – calcyss

+0

なぜそれが間違っていたのか忘れてしまった。 CMake 2.8.10では、target_link_librariesとtarget_include_directoriesへの新しいパラメータが追加されました。 –

+0

ありがとうございます。あなたのやり方はうまくいきます:) – calcyss

関連する問題