c – 使用cmake将依赖项传播到仅头文件的ExternalProject
发布时间:2020-12-16 10:01:54 所属栏目:百科 来源:网络整理
导读:我正在尝试使用CMake( Microsoft/GSL)构建一个仅包含头的库,这样我就可以使用GSL_INCLUDE_DIRS和GSL_LIBRARIES等变量链接到目标并传播相应的依赖项. 我正在研究的项目有一个TON的子目录,所有的外部项目都建在自己的子目录中,因此变量很重要. 我正在使用CMake
我正在尝试使用CMake(
Microsoft/GSL)构建一个仅包含头的库,这样我就可以使用GSL_INCLUDE_DIRS和GSL_LIBRARIES等变量链接到目标并传播相应的依赖项.
我正在研究的项目有一个TON的子目录,所有的外部项目都建在自己的子目录中,因此变量很重要. 我正在使用CMake 3.2.3 通常(对于具有实际.lib或.a的库),我会执行以下操作: SET(TARGET_NAME gsl) include(ExternalProject) ExternalProject_Add( ${TARGET_NAME}-ext URL "http://target/url" CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" ) # download/unzip the header-only project # Specify include dir SET(${TARGET_NAME}_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/include CACHE STRING "${TARGET_NAME} include directory") # Library add_library(${TARGET_NAME} SHARED IMPORTED GLOBAL) SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES IMPORTED_LOCATION "some/path/to/some/lib" ) add_dependencies(${TARGET_NAME} ${TARGET_NAME}-ext) SET(${TARGET_NAME}_LIBRARIES ${TARGET_NAME} CACHE STRING "${TARGET_NAME} library location") MARK_AS_ADVANCED(${TARGET_NAME_UPPER}_DIR ${TARGET_NAME_UPPER}_INCLUDE_DIRS ${TARGET_NAME_UPPER}_LIBRARIES) 这里的问题是,仅头文件库没有用于设置导入路径的库,因此我无法使用IMPORTED库.如果我根本不使用库,那么我不能在GSL上的其他模块中设置依赖关系,而不是每次构建(即下载/解压缩),这是我不想做的. custom_target会有同样的问题,所以这是不行的. 我想我想要的是一个接口库,就像 add_library(${TARGET_NAME} INTERFACE) add_dependencies(${TARGET_NAME} ${TARGET_NAME}-ext) 但随后cmake抱怨说
有没有我可以使用接口库(或其他东西)传播外部项目的依赖? 解决方法
不允许对INTERFACE库的依赖是
an oversight that was corrected in CMake version 3.3.升级到最新稳定版本后,我能够使用问题中描述的方法,并且它完全按照预期工作.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |