我想在我的子项目(在这种情况下,poco)组织目标,但我已经发现,无法修改ALIAS目标的属性。我希望我的外部项目中的目标位于它们自己的文件夹中,而不是蔓延到项目树中的任何地方(比如Visual Studio生成器)。有没有更容易的方法来添加我自己的属性项目?CMake:如何更改子目录项目目标上的属性?
所以不是:
- CMakePredefinedTargets
- ALL_BUILD
- INSTALL
- ...
- MyTargets
- SomeLibrary
- SomeExe
- CppUnit
- Crypto
- Data
- ...
我想:
- CMakePredefinedTargets
- ALL_BUILD
- INSTALL
- ...
- MyTargets
- SomeLibrary
- SomeExe
- Poco
- CppUnit
- Crypto
- Data
- ...
我尝试:
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
)
:从POCO库
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)
实例目标
我的目标是做到这一点,所以我不必为了生活质量的调整而分叉和维护自己的版本库。我可以用不同的方法来组织IDE的项目树吗?我知道externalproject_add存在,但我不认为这有我正在寻找的设施。我将在未来以git-submodules的形式添加其他项目,但根据是否有更简单的方法,我将探索其他途径。
编辑:
为了澄清,我已经使用一个单独的CMakeLists.txt为自己的项目的每个模块,再加上顶级的CMakeLists.txt它关系到他们在一起,以及收集外部库我的目标依赖。我想修改外部库的目标,而不必自己分叉和维护它们,这样我就可以在Visual Studio,xcode或其他程序中拥有漂亮的文件夹结构。 Linux显然并不重要,因为大多数编辑工具都是基于文件夹的。
可以在每个目录添加的CMakeLists.txt如果你想。为每个项目创建一个,并包含主目录中的目录。 – skypjack
@skypjack,你误会了。在我自己的项目中,我已经这样做了,但是我想修改别人项目的属性而不修改项目本身。当我需要它时,不需要为Poco分配生命的质量。 – BleuGamer