私は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})
実際に 'cmake'は、' target_link_libraries'で使われている場合、トップレベルのターゲットとの間に依存関係を自動的に生成することができます。https://cmake.org/cmake/help/v3.0/ command/target_link_libraries.html – fghj
私はもともとそれを試みましたが、それを動作させることはできませんでした。たとえば、add_dependencies(Scrubber FileIO)をトップレベルCMakeファイルに追加すると、「存在しないターゲットにターゲットレベルの依存関係を追加できません」というエラーが表示されます。私は間違った場所に置いていますか? – Gadzooks34