[英]How can I use CMake to get dependencies for Windows app while building it from Linux?
[英]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.