簡體   English   中英

使用Cmake建立依賴關系

[英]Building dependencies with Cmake

我是CMake的新手,正在嘗試弄清楚如何建立依賴關系。 我的項目文件夾的組織方式如下:

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

FileIO,CDE和實用程序是Scrubber中的可執行文件使用的靜態庫。

我希望能夠從頂層目錄執行一個make命令來構建所有內容。 如果我獨立地構建每個庫,那么當我執行頂級make時,一切都很好。 但是,如果我不提前這樣做,那么它將無法建立依賴關系,並且毫不奇怪,會抱怨找不到這些庫。

一個非常簡單的問題:如何使系統構建庫?

頂級頂級聊天清單

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)

SCRUBBER / FILEIO中的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 "")

SCRUBBER / CDES中的CDES清單

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 "")

SCRUBBER / UTILITIES中的公用事業清單

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 / SCRUBBER中的SCRUBBER CMAKELIST

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包含了add_dependency命令,它完全可以滿足您的需求。

使頂層依賴於其他頂層目標,以確保它們先於其他目標而構建。

這是錯誤的:

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

如果您具有庫add_library(FileIO STATIC ${SOURCE_FILES}) ,則應編寫:

target_link_libraries(Scrubber FileIO )

cmake會發現這也是目標,並創建具有適當依賴項的make文件,而不必使用add_dependency指向任何依賴add_dependency ,cmake會自動執行此操作。 至少對我來說是最新的cmake版本3.5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM