使用cmake禁用Visual Studio项目的构建

8
我正在生成一个包含几个项目 (目前有 4 个,最终将增加到 10-20 个) 的 VS2010 解决方案。我只想让其中一个项目进行构建;其余的项目应该被禁用。我可以通过进入配置管理器并取消勾选我不想要的项目来手动完成此操作,但显然这不是一个好的解决方案。
是否有什么我可以添加到 CMakeLists.txt 文件中的项目中,以使其执行此操作?在文档、谷歌和 Stack Overflow 上搜索都没有找到相关信息。
更新:以下是我的根 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 的部分是基于我在这里得到的答案:如何配置 CMake 以使 VS 解决方案使用特定的构建命令行?
下面是“platform”项目的 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})

2
啊,当我悬停在投票按钮上时,看到了弹出的文本,说明了投票应该意味着什么。“没有显示研究努力”?我已经花了很多时间研究这个问题,并在帖子中说过了。而“不清楚”——怎么可能不清楚我想做什么呢?“没有用”?对我来说是有用的。 - Srekel
给你点个赞。我同意这个问题并没有什么问题。不过,你可以添加一些来自你的CMakeLists.txt文件的示例部分,以便让其他人在其中操作。 - mevatron
我也对此很感兴趣。我有一些自定义目标,进行静态分析,我只想手动运行它们,而不是作为(ctrl-alt)F7启动构建的一部分。 - John
2个回答

3

3

如果你不想默认构建某些内容,可以将其从“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文件。 - Srekel
默认情况下,自定义目标不会成为 ALL_BUILD 的依赖项,但在配置管理器中未被取消标记的情况下,它们仍将通过(重新)构建解决方案命令进行构建。 - John

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接