cmake - 编译具有相同目标的不同子项目时出现 CMP0002 错误

标签 cmake target

我有很多子文件夹

home
|
|-library1
|-library2
|
|-libraryn

每个子文件夹都包含一个可以自行编译的完整库(每个库都有不同的维护程序)。到目前为止,它工作正常,我使用脚本编译它们。

现在我需要创建另一个库,这取决于现有库。为此,我创建了一个 CMakeLists.txt在主文件夹下,使用 add_subdirectory允许我编译所有库的命令。

我有类似的东西
cmake_minimum_required (VERSION 2.8)

add_subdirectory(library1)
add_subdirectory(library2)
...
add_subdirectory(libraryn)

当我尝试执行 cmake 时我收到各种库的以下错误:
CMake Error at libraryY/CMakeLists.txt:63 (add_custom_target):
  add_custom_target cannot create target "doc" because another target with
  the same name already exists.  The existing target is a custom target
  created in source directory
  "/path/to/libraryX".  See
  documentation for policy CMP0002 for more details.

发生这种情况是因为在每个库中我们都创建了一个 doc 目标,以便编译库本身的 Doxygen 文档。当库被一个一个编译时它工作正常,但使用主 CMakeLists.txt看来我做不到。
# Create doc target for doxygen documentation compilation.
find_package (Doxygen)
if (DOXYGEN_FOUND)
  set (Doxygen_Dir ${CMAKE_BINARY_DIR}/export/${Library_Version}/doc)
  # Copy images folder
  file (GLOB IMAGES_SRC "images/*")
  file (COPY ${IMAGES_SRC} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/images)
  configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
  add_custom_target (doc
    ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
    COMMENT "Generating doxygen documentation" VERBATIM
  )
else (DOXYGEN_FOUND)
  message (STATUS "Doxygen must be installed in order to compile doc")
endif (DOXYGEN_FOUND)

有没有办法一次编译这些项目而不修改这个目标?

最佳答案

如果您不想修改任何内容以便将所有这些项目构建为子项目,那么您可以使用 ExternalProject_Add构建和安装依赖项。

选项

或者,您可以使用 option排除命令 doc构建目标:

# Foo/CMakeLists.txt
option(FOO_BUILD_DOCS "Build doc target for Foo project" OFF)
# ...
if(DOXYGEN_FOUND AND FOO_BUILD_DOCS)
  add_custom_target(doc ...)
endif()

# Boo/CMakeLists.txt
option(BOO_BUILD_DOCS "Build doc target for Boo project" OFF)
# ...
if(DOXYGEN_FOUND AND BOO_BUILD_DOCS)
  add_custom_target(doc ...)
endif()

关于cmake - 编译具有相同目标的不同子项目时出现 CMP0002 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24998342/

相关文章:

cmake - 如何修复明显损坏的 CMake 构建?

c++ - cmake + 痛饮 + 依赖项

windows - 在 cmake 查找模块中处理发布/调试库的最佳实践

c++ - 我无法使用 cmake 链接静态库

Python:最接近目标的二的幂

makefile - Makefile-仅当文件不存在时才进行依赖

c++ - Linux C++ 项目目录布局 - CMake

javascript - 仅针对页面上多个按钮的一个 ID(或类)

c - #includes 在 C 文件中用于处理器特定的实现

c# - 尝试从命令提示符构建 VS2010 csproj