【问题标题】:Disabling a Visual Studio project for building using cmake禁用 Visual Studio 项目以使用 cmake 进行构建
【发布时间】:2011-11-12 18:02:58
【问题描述】:

我正在生成一个带有几个项目的 VS2010 解决方案(目前是 4 个,最终将达到 10-20 个)。我只想要其中一个来建造;其余的应该被禁用。我可以通过进入配置管理器并取消选中我不想要的框来手动执行此操作,但显然这不是一个好的解决方案。

有什么我可以添加到 CMakeLists.txt 文件中的项目,这会导致它执行此操作吗?搜索文档、谷歌和 SO 没有任何结果。

更新:这是我的根 CMakeLists.txt,以防万一:

cmake_minimum_required(VERSION 2.8)

add_definitions(-DCOMPILER_MSVC)
project (PDEngine)

set(LINKER_LANGUAGE CXX)

add_subdirectory (units/platform)
add_subdirectory (units/render_api)
add_subdirectory (units/memory)
add_subdirectory (units/game)

set(custom_exe "${CMAKE_CURRENT_BINARY_DIR}/units/Platform/Debug/Platform.lib2")

add_custom_command(OUTPUT ${custom_exe}
  COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/local/msvc/bam.bat -j $ENV{NUMBER_OF_PROCESSORS}
  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/local/msvc/bam.bat
)
#add_custom_command(OUTPUT ${custom_exe_clean}
  #COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/local/msvc/bam.bat -c
  #DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/local/msvc/bam.bat
#)

add_custom_target(bam ALL DEPENDS ${custom_exe})
#add_custom_target(bamclean ALL DEPENDS ${custom_exe_clean}})

(bam.bat 的内容基于我在这里得到的答案:How do I configure CMake to make the VS solution use a specific build commandline?

这是“平台”项目的 CMakeLists.txt:

cmake_minimum_required (VERSION 2.8)
project (Platform)

set (COMPILER_MSVC 1)

include_directories(${Platform_SOURCE_DIR}/include)
file(GLOB Project_HEADERS ${Platform_SOURCE_DIR}/include/platform/*.h)
source_group("Headers" FILES ${Project_HEADERS})

add_library(Platform STATIC EXCLUDE_FROM_ALL src/*.cpp ${Project_HEADERS})

【问题讨论】:

  • 啊,当我将鼠标悬停在投票按钮上时,看到了投票应该意味着什么的弹出文本。 “没有表现出研究努力”?我花了好几个小时研究这个问题,我在帖子中这么说。还有“不清楚”——我想做什么还不清楚? “没有用”?这是给我的。
  • +1 给了你。我同意这个问题没有错。不过,您可以从 CMakeLists.txt 文件中添加一些示例部分,为其他人提供操作的上下文。
  • 我也对这个感兴趣。我有一些执行静态分析的自定义目标,我只想手动运行,而不是 (ctrl-alt) F7 启动的构建的一部分。

标签: visual-studio visual-studio-2010 cmake


【解决方案1】:

因此,如果您不想在默认情况下构建某些内容,则可以将其从“ALL”目标中删除(在 Visual Studio 中显示为 ALL_BUILD)。这样做的方法是使用目标属性EXCLUDE_FROM_ALL,或者将 EXCLUDE_FROM_ALL 传递给 add_executable 和 add_library。 (自定义目标默认为 EXCLUDE_FROM_ALL,因此,要反过来,将 ALL 添加到 add_custom_target 的参数)。

然后,您的所有目标都会显示出来,但是当单击“构建解决方案”时,只会构建您想要的目标。其他可以通过右键单击它们并选择“构建”来构建,例如内置的 INSTALL 项目/目标。

【讨论】:

  • 谢谢。我试过了,但据我所知,它没有帮助。如果我进行修改,然后右键单击并手动构建“bam”,然后进行解决方案构建,它仍然会构建我进行更改的项目。我已经用我的 CMakeLists.txt 更新了我的帖子
  • 默认情况下自定义目标不会是 ALL_BUILD 的依赖项,但它们仍将由(重新)构建解决方案命令构建,除非在配置管理器中未标记。
【解决方案2】:

为此目的有一个EXCLUDE_FROM_DEFAULT_BUILD 目标属性。

https://stackoverflow.com/a/14911387/594456

【讨论】:

    猜你喜欢
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    相关资源
    最近更新 更多