從FindBoost.cmake
模塊CMake的3.8:如何在以後導入目標GLOBAL?
foreach(COMPONENT ${Boost_FIND_COMPONENTS})
if(_Boost_IMPORTED_TARGETS AND NOT TARGET Boost::${COMPONENT})
string(TOUPPER ${COMPONENT} UPPERCOMPONENT)
if(Boost_${UPPERCOMPONENT}_FOUND)
if(Boost_USE_STATIC_LIBS)
add_library(Boost::${COMPONENT} STATIC IMPORTED)
else()
# Even if Boost_USE_STATIC_LIBS is OFF, we might have static
# libraries as a result.
add_library(Boost::${COMPONENT} UNKNOWN IMPORTED)
endif()
,並從docu of that module相應的註釋:
重要的是要注意的是,進口的目標行爲不同於通過這個模塊創建的變量是很重要的:多調用相同目錄下的find_package(Boost)或具有不同選項(例如靜態或共享)的子目錄不會覆蓋第一個調用創建的目標的值。
我看到合理的目標不是GLOBAL
。
但是,使它們成爲全球性的首選方式是什麼?
我習慣於在包含任何find_package(...)
調用的子目錄中定義我的項目的依賴關係。因此,Boost導入的目標在另一目錄中不可用,例如, /tests/CMakeLists.txt
:
<project_root>
/3rdparty
/git-submodule-of-a-small-lib
/CMakeLists.txt
/include
/...
/tests
/CMakeLists.txt
/CMakeLists.txt