【发布时间】:2017-12-18 22:03:38
【问题描述】:
我正在尝试组织子项目(在本例中为 poco)中的目标,但我发现无法为 ALIAS 目标修改属性。我希望我的外部项目中的目标位于他们自己的文件夹中,而不是在项目树中到处蔓延(比如 Visual Studio 生成器)。有没有更简单的方法来添加具有我自己的属性的项目?
所以而不是:
- CMakePredefinedTargets
- ALL_BUILD
- INSTALL
- ...
- MyTargets
- SomeLibrary
- SomeExe
- CppUnit
- Crypto
- Data
- ...
我想要:
- CMakePredefinedTargets
- ALL_BUILD
- INSTALL
- ...
- MyTargets
- SomeLibrary
- SomeExe
- Poco
- CppUnit
- Crypto
- Data
- ...
我的尝试:
function(add_subdirectory_with_folder folder_name)
function(add_library name type)
_add_library(${ARGV})
set_target_properties(${name}
PROPERTIES
FOLDER "${folder_name}"
)
endfunction()
add_subdirectory(${ARGN})
endfunction()
# External Libs
add_subdirectory_with_folder("Poco" libs/poco)
poco 库中的示例目标:
add_library( "${LIBNAME}" ${LIB_MODE} ${SRCS} )
add_library( "${POCO_LIBNAME}" ALIAS "${LIBNAME}")
set_target_properties( "${LIBNAME}"
PROPERTIES
VERSION ${SHARED_LIBRARY_VERSION} SOVERSION ${SHARED_LIBRARY_VERSION}
OUTPUT_NAME ${POCO_LIBNAME}
DEFINE_SYMBOL JSON_EXPORTS
)
我的目标是做到这一点,这样我就不必分叉和维护我自己的库版本,我只想将其用于生活质量调整。我可以使用其他方法来组织 IDE 的项目树吗?我知道 externalproject_add 存在,但我认为这没有我正在寻找的设施。我将来会以 git-submodules 的形式添加其他项目,但取决于是否有更简单的方法,我会探索其他途径。
编辑:
为了澄清,我已经为我自己项目的每个模块使用了一个单独的 CMakeLists.txt,加上一个将它们联系在一起的顶级 CMakeLists.txt,以及收集我的目标所依赖的外部库。我想修改外部库的目标,而不必自己分叉和维护它们,这样我就可以在 Visual Studio、xcode 或其他中拥有很好的文件夹结构。 Linux 显然没那么重要,因为大多数编辑工具已经是基于文件夹的。
【问题讨论】:
-
您可以根据需要在每个目录中添加一个 CmakeLists.txt。为每个项目创建一个并包含来自主项目的目录。
-
@skypjack,你误会了。在我自己的项目中我已经这样做了,但是我想修改别人项目的属性而不修改项目本身。当我只需要生活质量时,就不需要分叉 Poco。
标签: c++ cmake poco-libraries build-tools