我試圖用ExternalProject_Add添加外部項目作爲庫到我的項目:CMake:如何在ExternalProject中使用INTERFACE_INCLUDE_DIRECTORIES?
ExternalProject_Add(
xgboost
GIT_REPOSITORY https://github.com/dmlc/xgboost.git
GIT_TAG v0.60
PREFIX ${CMAKE_CURRENT_BINARY_DIR}
INSTALL_COMMAND ""
)
另外,我定義庫的目標和增加外部項目作爲一個依賴:
set(XGBOOST_PREFIX_PATH "${CMAKE_CURRENT_BINARY_DIR}/src")
set(XGBOOST_BINARY_PATH "${XGBOOST_PREFIX_PATH}/xgboost-build")
set(XGBOOST_BINARY_INCLUDE "${XGBOOST_PREFIX_PATH}/xgboost/include;${XGBOOST_PREFIX_PATH}/xgboost/dmlc-core/include;${XGBOOST_PREFIX_PATH}/xgboost/rabit/include")
add_library(libxgboost IMPORTED STATIC GLOBAL)
add_dependencies(libxgboost xgboost)
set_target_properties(libxgboost PROPERTIES
"IMPORTED_LOCATION" "${XGBOOST_BINARY_PATH}/liblibxgboost.dylib"
"IMPORTED_LINK_INTERFACE_LIBRARIES" "${CMAKE_THREAD_LIBS_INIT}"
"INTERFACE_INCLUDE_DIRECTORIES" "${XGBOOST_BINARY_INCLUDE}"
)
在另外的CMakeLists.txt:
add_library(somelib STATIC SomeLib.cpp)
target_include_directories(somelib PUBLIC libxgboost)
target_link_libraries(somelib libxgboost)
的問題是,CMake的INTERFACE_INCLUDE_DIRECTORIES不允許出口include目錄哪些呢 不存在。
是否有任何其他方式可以自動爲所有依賴於的目標自動包含頭文件libxgboost?
UPDATE:
錯誤消息:
CMake Error in somelib/CMakeLists.txt:
Imported target "libxgboost" includes non-existent path
"build/xgboost/src/xgboost/include"
in its INTERFACE_INCLUDE_DIRECTORIES. Possible reasons include:
* The path was deleted, renamed, or moved to another location.
* An install or uninstall procedure did not complete successfully.
* The installation package was faulty and references files it does not
provide.
請提供錯誤消息。 – Tsyvarev
「IMPORTED_LINK_INTERFACE_LIBRARIES」已被棄用。使用'INTERFACE_LINK_LIBRARIES'。你有沒有考慮過使用'execute_process()'在ExternalProject CMakeLists.txt中調用'cmake'(兩次),那麼你在配置的時候會有依賴關係?或者,您可以在CMakeLists.txt配置時間期間僞造僅依賴項目錄的創建。 – utopia
這是我的計劃B,但仍然懷疑是否有一個良好的做法,我面臨同樣的確切問題 –