2012-01-19 31 views
40

私はプロジェクトにライブラリに分割されていませんが、ソースはディレクトリツリーに編成されています。私はcmakeにディレクトリを下ろすように指示する方法を知らないので、親ディレクトリに定義されているプロジェクトにそのディレクトリのソースを追加します。私は、次のことをしようとしています。プロジェクト/ソース/ CMakelists.txtでサブディレクトリのソースをcmakeプロジェクトに追加

プロジェクト/ソース/ folder1の/ CMakeLists.txtで、その後
set(SOURCE 
    ${CMAKE_CURRENT_SOURCE_DIR}/unitTest/main.cpp 
) 
add_subdirectory("${PROJECT_SOURCE_DIR}/folder1") 
add_executable(UnitTestRNG ${SOURCE} ${HEADERS}) 

set(SOURCE 
    ${SOURCE} 
    ${CMAKE_CURRENT_SOURCE_DIR}/file1.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/file2.cpp 
) 
set(HEADERS 
    ${HEADERS} 
    ${CMAKE_CURRENT_SOURCE_DIR}/file1.hpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/file2.hpp 
) 

いくつかのメッセージを使用して()ステートメントでは、子フォルダがSOURCE変数の内容を取得することがわかりましたが、その変数への新しい割り当ては、親CMakeLists.txtに戻っても持続しません。

例を探して、cmakeのチュートリアルでは、結論に私を導いた: - ソースファイルの構造は、通常、プロジェクト内でフラットです - コードがフォルダに分割されている場合、通常は対応するライブラリに分割されます。

この構造を試すことによって私が逸脱している「ベストプラクティス」があるのだろうかと思います。

答えて

32

は言う:プロジェクト/ソース/ folder1の/ CMakeLists.txtで :

set(SOURCE 
    ${SOURCE} 
    ${CMAKE_CURRENT_SOURCE_DIR}/file1.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/file2.cpp 
    PARENT_SCOPE 
) 
set(HEADERS 
    ${HEADERS} 
    ${CMAKE_CURRENT_SOURCE_DIR}/file1.hpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/file2.hpp 
    PARENT_SCOPE 
) 
+0

構文をありがとう!それはきれいに働いた。 – 2NinerRomeo

+0

これは、最新版のcmakeでこれを達成するための推奨方法ですか? – lanoxx

4

project/source/CMakelists.txtにすべてのソースを設定することはできませんか?

とにかく、PARENT_SCOPEまたはCACHEオプションはset commandです。 arrowdodgerの答えの第二の部分と同様に

+0

あなたの答えの最初の部分は、私はその間に何をしてきた確かにあります。 – 2NinerRomeo

関連する問題