2016-04-21 13 views
0

私はCMakeには新しく、依存関係を構築する方法を理解しようとしています。Cmakeによるビルドの依存性

Scrubber 
-- FileIO 
-- CDEs 
-- Utilities 
-- Scrubber 

FILEIO、CDEの、およびユーティリティは、スクラバーで実行可能で使用されている静的ライブラリです:私のプロジェクトのフォルダは、次のように整理されています。

すべてをビルドするトップディレクトリから1つのmakeコマンドを実行できるようにします。私が独立して各ライブラリを構築すると、トップメイクを実行するとすべてがうまく統合されます。しかし、私がそれを前もってやっていないと、依存関係が構築されず、驚くことではなく、図書館が見つからないという不満があります。

非常に単純な質問です:どうすればシステムにライブラリをビルドさせるのですか? SCRUBBER SCRUBBER/CDES、IN

cmake_minimum_required(VERSION 3.2) 
project(Scrubber) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

add_subdirectory(FileIO) 
add_subdirectory(CDEs) 
add_subdirectory(Utilities) 
add_subdirectory(Scrubber) 

FILEIO CMAKELISTS、IN SCRUBBER/FILEIO

cmake_minimum_required(VERSION 3.2) 
project(FileIO) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

file(GLOB SOURCE_FILES *.cpp) 

add_library(FileIO STATIC ${SOURCE_FILES}) 

#Don't prepend with "lib" 
set_target_properties(FileIO PROPERTIES PREFIX "") 

CDES CMAKELISTS

cmake_minimum_required(VERSION 3.2) 
project(CDEs) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

set(BOOST_INCLUDE_DIR "/usr/lib/boost_1_60_0") 

include_directories(${BOOST_INCLUDE_DIR}) 

file(GLOB SOURCE_FILES *.cpp) 

add_library(CDEs STATIC ${SOURCE_FILES}) 

#Don't prepend with "lib" 
set_target_properties(CDEs PROPERTIES PREFIX "") 

UTILITIES CMAKELIST、IN SCRUBBER /ユーティリティ

を、IN

トップレベルCMAKELISTS

cmake_minimum_required(VERSION 3.2) 
project(Utilities) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

set(BOOST_INCLUDE_DIR "/usr/lib/boost_1_60_0") 

include_directories(${BOOST_INCLUDE_DIR}) 

file(GLOB SOURCE_FILES *.cpp) 

add_library(Utilities STATIC ${SOURCE_FILES}) 

#Don't prepend with "lib" 
set_target_properties(Utilities PROPERTIES PREFIX "") 

SCRUBBER CMAKELIST、IN SCRUBBER/SCRUBBER

cmake_minimum_required(VERSION 3.2) 
project(Scrubber) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

set(BOOST_INCLUDE_DIR "/usr/lib/boost_1_60_0") 
set(PROJECT_INCLUDE_DIR "..") 

include_directories(${BOOST_INCLUDE_DIR} ${PROJECT_INCLUDE_DIR}) 

find_library(FILEIO_LIB FileIO.a HINTS ../FileIO/) 
find_library(CDES_LIB CDEs.a HINTS ../CDEs/) 
find_library(UTILITIES_LIB Utilities.a HINTS ../Utilities/) 

file(GLOB SOURCE_FILES *.cpp) 

add_executable(Scrubber ${SOURCE_FILES}) 

target_link_libraries(Scrubber ${FILEIO_LIB} ${CDES_LIB} ${UTILITIES_LIB}) 

答えて

0

これは間違っている:

target_link_libraries(Scrubber ${FILEIO_LIB} ${CDES_LIB} ${UTILITIES_LIB}) 

ライブラリadd_library(FileIO STATIC ${SOURCE_FILES})を持っている場合、あなたは 書き込み必要があります。これは、ターゲットとしてメイクファイルを作成していることを

target_link_libraries(Scrubber FileIO) 

cmakeのを見つけます依存関係を指摘する必要はなく、add_dependency、 cmakeとの依存関係を指す必要はありません。少なくともcmakeのバージョン3.5

0

cmakeのは、あなたが必要な正確に何をしadd_dependencyコマンドが含まれています。

トップレベルのターゲットを他のトップレベルのターゲットに依存させてから、その前にビルドするようにします。

+0

実際に 'cmake'は、' target_link_libraries'で使われている場合、トップレベルのターゲットとの間に依存関係を自動的に生成することができます。https://cmake.org/cmake/help/v3.0/ command/target_link_libraries.html – fghj

+0

私はもともとそれを試みましたが、それを動作させることはできませんでした。たとえば、add_dependencies(Scrubber FileIO)をトップレベルCMakeファイルに追加すると、「存在しないターゲットにターゲットレベルの依存関係を追加できません」というエラーが表示されます。私は間違った場所に置いていますか? – Gadzooks34

関連する問題