我有很多子文件夹
home
|
|-library1
|-library2
|
|-libraryn
每个子文件夹都包含一个可以自行编译的完整库(每个库都有一个不同的管理器)。到目前为止,它可以正常工作,我使用脚本进行编译。
现在,我需要创建另一个库,该库取决于现有库。为了做到这一点,我CMakeLists.txt
使用add_subdirectory
允许我编译所有库的命令创建了一个home文件夹。
我有类似的东西
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()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句