CMake를 통해 Visual Studio 솔루션의 시작 프로젝트를 변경하려면 어떻게하나요?
CMake를 사용하여 Visual Studio 프로젝트를 생성하고 있습니다. 한 가지를 제외하고 모든 것이 잘 작동합니다.
솔루션의 시작 프로젝트는 항상 ALL_BUILD
입니다. CMake를 통해 시작 프로젝트를 원하는 실제 프로젝트로 변경하려면 어떻게해야합니까?
당신은 할 수 없습니다. 시작 프로젝트는 CMake에서 생성되지 않은 이진 파일에 저장됩니다. 이 바이너리 파일이 없으면 Visual Studio는 솔루션 파일의 첫 번째 프로젝트로 기본 설정되고 ALL_BUILD 프로젝트는 항상 첫 번째입니다.
업데이트 : 이 답변은 이제 CMake 3.6에서 가능하므로 "오래된"것입니다. ComicSansMS의 답변을 참조하십시오 .
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)
이것은 솔루션 bar
의 시작 프로젝트로 설정 됩니다 foo.sln
.
Visual 2005부터 구성은 일반 xml 인 projectname.vc (x) proj.user 파일 이름에 저장됩니다.
시작 프로젝트를 변경하는 방법에 대해서는 모르겠지만 어리석은 팝업을 표시하는 대신 원하는 실행 파일을 실행하도록 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
)
이 모듈은 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)
저와 같은 펄 의존성을 허용 할 수 없다면 이 문제를 해결하기 위해 slnStartupProject 라는 윈도우 용 작은 명령 줄 유틸리티를 작성했습니다 . 다음과 같이 시작 프로젝트를 자동으로 설정합니다.
slnStartupProject slnFilename projectName
저는 개인적으로 솔루션 의 첫 번째 프로젝트로 더미 ALL_BUILD 프로젝트 를 항상 설정하는 cmake로 솔루션을 생성 한 후 프로젝트를 설정하는 데 사용합니다 .
소스는 github에 있습니다.
https://github.com/michaKFromParis/slnStartupProject
포크와 피드백을 환영합니다.
도움이 되었기를 바랍니다!
IDE에서 "시작 프로젝트로 설정"을 누를 때 사용자가 선택한 명시 적 선택이 이진 파일에 저장되는 것은 옳습니다. 하지만 솔루션을 처음 열 때 Visual Studio가 솔루션의 첫 번째 프로젝트를 암시 적 시작 프로젝트로 사용하므로 CMake가 이에 영향을 미친다는 것을 다른 곳에서 발견했습니다.
이제 우리의 문제 : ALL_BUILD는 항상 첫 번째 프로젝트입니다. 이를 변경하기 위해 CMake 후에 파일에서 원하는 프로젝트 정의를 잘라내어 전면에 붙여 넣는 짧은 perl 스크립트를 실행하고 있습니다. 첫 번째 매개 변수의 솔루션 파일 경로, 두 번째의 프로젝트 이름 :
use strict;
use File::Spec;
# variables
my $slnPath = File::Spec->rel2abs($ARGV[0]);
my $projectName = $ARGV[1];
my $contents;
my $header;
my $project;
my $GUID = "[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}";
my $fh;
# read file content (error if not found)
print "Setting \"$projectName\" as Startup Project in \"$slnPath\"...\n";
die "Error: path \"$slnPath\" not found!\n" if not -f $slnPath;
open($fh, "<", $slnPath) or die "Error: cannot read $slnPath: $!";
$contents = do { local $/; <$fh> };
close($fh) or warn "close failed: $!";
# extract part before Projects definition section (the first mention of "Project([GUID])")
$header = $1 if $contents =~ s{(.*?(?=Project\("\{${GUID}\}"\)))}{}si;
# extract definition of the project specified (error if not found)
$project = $1 if $contents =~ s{(Project\("\{${GUID}\}"\) = \"${projectName}\".*?EndProject\s)}{}si;
die "Error: Project not found!\n" if not defined $project or not length $project;
# write header, project definition and remaining content back into the file
`attrib -R "$slnPath"`;
open($fh, ">", $slnPath) or die "Error: cannot write to $slnPath: $!";
print $fh $header, $project, $contents;
close($fh) or warn "close failed: $!";
print "Successfully done.\n";
솔루션이 열리면 암시 적 시작 프로젝트가 이진 파일에 저장되므로 명시 적이되어 CMake 재실행 (예 : 사후 실행을 허용하지 않는 ZERO-CHECK에 의해 트리거 됨)에서도 유지됩니다. 같은 방식으로 명시적인 사용자 선택도 보존됩니다.
(ActiveState Perl을 사용하는 Win7 컴퓨터에서 작성 및 테스트 됨)
cmake 3.5를 사용하면 시작 프로젝트 (VS 2010 용)를 다음과 같이 변경할 수 있습니다.
SET(CMAKE_DEFAULT_STARTUP_PROJECT myFavoriteProject)
프로젝트의 기본 CMakeLists.txt에 있습니다. 기본적으로 ALL_BUILD로 설정됩니다.
ReferenceURL : https://stackoverflow.com/questions/7304625/how-do-i-change-the-startup-project-of-a-visual-studio-solution-via-cmake
'programing tip' 카테고리의 다른 글
전체 텍스트 파일을 Java의 문자열로 (0) | 2021.01.06 |
---|---|
IntelliJ IDEA에 사용하지 않은 것으로 식별하지 말아야 할 방법 알리기 (0) | 2021.01.06 |
Jenkins 기본보기 변경 (0) | 2021.01.06 |
Godaddy에서 AWS Route 53으로 도메인을 이동하는 방법 (0) | 2021.01.06 |
sublime text2 python 오류 메시지 / usr / bin / python : ''에서 '__main__'모듈을 찾을 수 없습니다. (0) | 2021.01.06 |