在CMake Visual Studio中创建所有项目取决于一个项目

时间:2016-03-31 12:19:29

标签: visual-studio cmake

在我的项目中,我有大约250个项目,其中一个主项目使用了大部分项目。在主项目运行时,所有项目都是最新的非常重要。所以基本上,Visual Studio应该在编译(并运行)MainProject时检查所有250个项目的更改。我的CMakeLists.txt文件看起来像这样。

根/的CMakeLists.txt

....
add_subdirectory (MainProject)
add_subdirectory (ProjectA)
add_subdirectory (ProjectB)
add_subdirectory (ProjectC)
add_subdirectory (ProjectD)
....

根/ MainProject /的CMakeLists.txt

....
add_executable (MainProject a.cpp b.cpp)
add_dependencies (MainProject ProjectA ProjectB ...)
....

根/项目A /的CMakeLists.txt

....
add_executable (ProjectA a.cpp b.cpp)
....

显然这是一个非常简单的例子,但希望这个想法存在。基本上,为了使Visual Studio检查所有250个项目的依赖关系,我必须将主项目中的所有其他项目添加为依赖项。现在这根本不是一个优雅的解决方案,因为MainProject中的add_dependencies具有很多依赖性。它有效,但这个问题有什么更优雅的吗?

1 个答案:

答案 0 :(得分:0)

将我的评论转化为答案

目前(根据​​CMake版本3.5.x),据我所知,没有CMake本身提供的全局目标列表(例如作为全局属性)。

修改:现已实施:全球BUILDSYSTEM_TARGETS属性已与CMake 3.7一起发布

可行解决方案

  1. 在您的情况下 - 假设您不想修改所有250个子项目的CMakeLists.txt文件 - 覆盖add_executable()add_library()和{{1会做的伎俩:

    add_custom_target()

    果然,如果你从头开始这样做,我会 - 正如@Lindydancer建议的那样 - 使用你自己的那些命令版本来允许全局自定义。

  2. 如果您遵循cmake_minimum_required(VERSION 2.8) project(DependsAllTest) macro(add_library _target) _add_library(${_target} ${ARGN}) set_property(GLOBAL APPEND PROPERTY GlobalTargetList ${_target}) endmacro() macro(add_executable _target) _add_executable(${_target} ${ARGN}) set_property(GLOBAL APPEND PROPERTY GlobalTargetList ${_target}) endmacro() macro(add_custom_target _target) _add_custom_target(${_target} ${ARGN}) set_property(GLOBAL APPEND PROPERTY GlobalTargetList ${_target}) endmacro() add_subdirectory(MainProject) add_subdirectory(ProjectA) add_subdirectory(ProjectB) add_subdirectory(ProjectC) add_subdirectory(ProjectD) get_property(_allTargets GLOBAL PROPERTY GlobalTargetList) message(STATUS "GlobalTargetList: ${_allTargets}") add_dependencies(MainProject ${_allTargets}) 始终是第一位的先决条件,您可以稍微简化一下:

    MainProject
  3. <强>参考