2016-03-22 2 views
0

私はcmakeファイル作成の新人です。ディレクトリのリストにC++コードがあり、各ディレクトリには独自のCMakeLists.txtファイルがあります。各ディレクトリで実行可能ファイルをコンパイルして作成するためには、ディレクトリ内に移動し、端末上で次の2つのコマンドを実行する必要があります。すべてのサブディレクトリCMakeListファイルを実行して出力をキャプチャする方法は?

$ cmake . 
$ make 

例のディレクトリ構造: enter image description here

各ディレクトリ1、2 ... 41には、独自の `CMakeLists.txt」を有します。各ディレクトリのファイル構造の内部

例:コンパイルのために enter image description here

と各ディレクトリに実行可能ファイルを作成し、私はそれらの牽引コマンドに従わなければなりません。

しかし、私はpythonスクリプト/ cmakeスクリプトを書いて、各ディレクトリでこの動作を行い、出力をキャプチャしてログファイルに保存する必要があります。

私の問題を解決するために私を案内してくれる人がいらっしゃいます。前もって感謝します。このような

マイ各ディレクトリCMakeLists.txt:

project(foundations) 
cmake_minimum_required(VERSION 2.6) 

include_directories($ENV{GMOCK_HOME}/include $ENV{GMOCK_HOME}/gtest/include) 
link_directories($ENV{GMOCK_HOME}/mybuild $ENV{GMOCK_HOME}/gtest/mybuild) 
add_definitions(-std=c++11) 

set(sources main.cpp RetweetCollectionTest.cpp) 
add_executable(test ${sources}) 
target_link_libraries(test pthread) 
target_link_libraries(test gmock) 
target_link_libraries(test gtest) 

答えて

3

add_subdirectory https://cmake.org/cmake/help/v3.0/command/add_subdirectory.htmlはあなたが必要なものを正確にです。

EDIT:例えば

add_subdirectory(1 1)

最初のパラメータは、ソースディレクトリであり、そして第二のバイナリDIRあります。だから、名前は重複すべきではありません。あなたはCMakeListsを書き換えしたくない場合は、

for dir inls; do cd $dir; cmake . && make; cd ..; done

のような単純なbashスクリプトは、あなたのためのより適切であろう、https://stackoverflow.com/a/7788165/934691

しかし:

また、これを確認してください。

+0

私は既に 'add_subdirectory(1)' ..と試してみました。しかし、このルートファイルに対してcmakeを実行するとき。次のエラーが表示されます。 'add_executable'は、別のターゲットが既に存在するため、ターゲット" test "を作成できません。 – Nagarajan

+0

'binary_dir'パラメータを設定しようとしましたか? – Ilmirus

+0

私はそれを設定する必要があります。あなたは私の要求のためのcmakeを書くことができるので、私はもう少し理解することができます – Nagarajan

関連する問題