如何通过CMake更改Visual Studio解决方案的启动项目?

gig*_*gle 56 startup cmake visual-studio-project visual-studio

我正在使用CMake生成Visual Studio项目.除了一件事,一切都很好.

解决方案中的启动项目始终是ALL_BUILD.如何通过CMake将启动项目更改为我想要的实际项目?

Com*_*sMS 101

CMake现在通过VS_STARTUP_PROJECT目录属性支持版本3.6及更高版本:

cmake_minimum_required(VERSION 3.6)
project(foo)
# ...

add_executable(bar ${BAR_SOURCES})
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT bar)
Run Code Online (Sandbox Code Playgroud)

这将设置barfoo.sln解决方案的启动项目.


And*_*dré 21

你不能.启动项目存储在二进制文件中,该文件不是由CMake生成的.如果没有该二进制文件,visual studio将默认为解决方案文件中的第一个项目,ALL_BUILD项目始终是第一个...

更新:这个答案是"过时的",因为现在可以使用CMake 3.6.请参阅ComicSansMS的答案.

  • 请注意,CMake最终在3.6版本中引入了对此的支持.有关详细信息,请参阅[我的回答](http://stackoverflow.com/a/37994396/577603). (10认同)
  • 在Visual Studio中,您可以使用上下文菜单命令"设置为启动项目"作为项目创建后的解决方法. (5认同)

Cal*_*602 16

从Visual 2005开始,配置存储在文件名projectname.vc(x)proj.user中,它是普通的xml.

我不知道改变启动项目的方法,但你当然可以设置ALL_BUILD来运行所需的可执行文件,而不是显示愚蠢的弹出窗口:

create_default_target_launcher(
    your_desired_target_name
    WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/desired_path/"
    # or ${CMAKE_CURRENT_BINARY_DIR}, depending on your setup
)
Run Code Online (Sandbox Code Playgroud)

这个模块可以在rpavlik的github找到.您只需将其添加到最顶层的CMakeLists.txt中:

list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/external/rpavlik-cmake-modules-1c73e35") # or whichever path you put the module in.
include(CreateLaunchers)
Run Code Online (Sandbox Code Playgroud)

这里有例子.


小智 7

如果你不能允许像我这样的perl依赖,我只是为windows编写了一个名为slnStartupProject的命令行实用程序来解决这个问题.它会自动设置启动项目,如下所示:

slnStartupProject slnFilename projectName
Run Code Online (Sandbox Code Playgroud)

在使用cmake生成解决方案之后,我个人使用它来设置项目,该解决方案始终将虚拟ALL_BUILD项目设置为解决方案中的第一个项目.

源代码在github上:

https://github.com/michaKFromParis/slnStartupProject

叉子和反馈是受欢迎的.

希望这可以帮助!