加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 程序设计 > 正文

CMake依赖项:强制重新编译外部库更改

发布时间:2020-05-23 00:34:53 所属栏目:程序设计 来源:互联网
导读:我正在尝试正确地管理目标在外部构建的库上的依赖关系,并且不知何故我没有成功.我已经阅读了大量的教程,帖子和例子,但是,因为我是CMake的新手,我想我错过了一些明显的东西. 设置如下.用另一种(CMake不支持的)语言构建的外部库产生libadatest.a.我已经使用了Ex

我正在尝试正确地管理目标在外部构建的库上的依赖关系,并且不知何故我没有成功.我已经阅读了大量的教程,帖子和例子,但是,因为我是CMake的新手,我想我错过了一些明显的东西.

设置如下.用另一种(CMake不支持的)语言构建的外部库产生libadatest.a.我已经使用了ExternalProject_Add.然后,有另一个使用此lib的常规C目标.一切正常,但如果我更改原始库,即使我重新编译它,C目标也不会重新编译.这是一个完整的样本.我正在使用CMake 2.8.12:

cmake_minimum_required(VERSION 2.8)    
include(ExternalProject)

ExternalProject_Add(
    AdaTestExternal # Not important
    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
    BUILD_COMMAND gprbuild -P${CMAKE_CURRENT_SOURCE_DIR}/adalibtest -XOBJ_DIR=${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY} -XLIB_DIR=${CMAKE_CURRENT_BINARY_DIR}
    ALWAYS 1    # Force build,gprbuild will take care of dependencies
    # BUILD_ALWAYS 1 # For 3.0 higher versions?
    INSTALL_COMMAND ""
)
add_custom_target(AdaTest DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/libadatest.a)
link_directories(${CMAKE_CURRENT_BINARY_DIR}) # Needed or won't find it

add_executable(main_ada main.c)
add_dependencies(main_ada AdaTest) # We must depend on the final output lib
target_link_libraries(main_ada adatest)

我试图创建一个依赖于实际库的中间自定义目标,然后使主C目标依赖于此目标.

当我删除外部构建的库(libadatest.a)时,这是正确的外部重新编译但主要可执行文件没有重新链接.很明显,库的时间戳比使用它的可执行文件更新鲜.

编辑:我也试过这个而不是自定义目标,同样的负面结果:

add_library(AdaTest
    UNKNOWN IMPORTED
    IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/libadatest.a)
在这篇旧帖子中找到了正确的解决方案(正如预期的那样简单): http://www.cmake.org/pipermail/cmake/2010-November/041072.html

要点是使用target_link_libraries中的实际文件,因此检查其时间戳.因此不需要中间或自定义依赖项:

set(AdaTestLib ${CMAKE_CURRENT_BINARY_DIR}/libadatest.a)

add_executable(main_ada main.c)
add_dependencies(main_ada AdaTestExternal)
target_link_libraries(main_ada ${AdaTestLib})

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读