我目前正在使用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}
)
但这会
所以这对我来说不是解决方案。