在CMake生成的构建系统中清理不会传播到外部项目中

时间:2017-10-05 13:04:41

标签: cmake

我目前正在使用CMake建立一个构建系统,但我有一些与#34; make clean"与外部项目一起:我无法弄清楚为什么要做清洁"不会传播到我通过ExternalProject_Add添加的项目。

我的(简约示例)源结构如下所示:

/
|- test/
|  |- CMakeLists.txt
|  |- main.cpp
|  |- my_lib
|     |- CMakeLists.txt
|     |- lib_functions.cpp

在/test/CMakeLists.txt中我使用ExternalProject_Add添加my_lib:

cmake_minimum_required(VERSION 2.8)

# via external project
include(ExternalProject)
set(MY_LIB_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/my_lib)
ExternalProject_Add(ext_my_lib
    DOWNLOAD_COMMAND ""
    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/my_lib
    BINARY_DIR ${MY_LIB_OUTPUT_DIR}
    INSTALL_COMMAND ""
    )
add_library(my_lib STATIC IMPORTED)
set_target_properties(my_lib PROPERTIES IMPORTED_LOCATION ${MY_LIB_OUTPUT_DIR}/libmy_lib.a)
add_dependencies(my_lib
    ext_my_lib
    )

set(PROJECT_NAME my_test)
project(${PROJECT_NAME})

add_executable(${CMAKE_PROJECT_NAME} main.cpp)
target_link_libraries(${CMAKE_PROJECT_NAME} my_lib)

/test/my_lib/CMakeLists.txt只是一个简单的库:

cmake_minimum_required(VERSION 2.8)

set(PROJECT_NAME my_lib)
project(${PROJECT_NAME})

add_library(${CMAKE_PROJECT_NAME} lib_functions.cpp)

从/test/CMakeLists.txt生成构建系统后,我调用" make"然后" make clean&#34 ;,但my_lib没有清理,i。即文件build / my_lib / libmy_lib.a不会被删除。 相反,当我直接打电话给#34; make clean"在build / my_lib目录中" make clean -C my_lib" my_lib正确清理,我。即文件build / my_lib / libmy_lib.a被删除。 这让我想到了某种方式" make clean"没有正确传播到外部项目,但我无法弄清楚为什么。

我知道我可以通过替换"#via external project"来使用add_subdirectory。

中的/test/CMakeLists.txt文件中的部分
# via add_subdirectory
set(MY_LIB_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/my_lib)
add_subdirectory(my_lib ${MY_LIB_OUTPUT_DIR})

使用这种方式" make clean"工作正常,我。即build / my_lib / libmy_lib.a已删除,但由于其他原因,我需要使用外部项目。

我也知道我可以定义ADDITIONAL_MAKE_CLEAN_FILES,e。 G。

set_property(DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
    ${MY_LIB_OUTPUT_DIR}
    )

但这会

  • 还会删除my_lib
  • 的构建系统
  • 不打电话"干净"在/test/my_lib/CMakeLists.txt
  • 中的依赖关系

所以这对我来说不是解决方案。

0 个答案:

没有答案