CMake를 사용하여 Visual Studio C ++ 프로젝트 파일 생성


93

Linux 및 Windows에서 컴파일되는 코드를 위해 오픈 소스 C ++ 프로젝트에서 작업 중입니다. CMake를 사용하여 Linux에서 코드를 빌드합니다. 손쉬운 개발 설정과 정치적 이유로 Windows에서 Visual Studio 프로젝트 파일 / 편집기를 고수해야합니다 ( 예를 들어 Code :: Blocks로 전환 할 수 없습니다 ). 여기 와 같이 CMake를 사용하여 Visual Studio 파일을 생성하는 지침이 표시 됩니다 .

CMake를 사용하여 Visual Studio 파일을 생성 한 적이 있습니까? 경험은 어땠습니까? 내 프로젝트에 새 파일을 추가하고 싶다고 가정합니다. 이를위한 워크 플로우는 무엇입니까?


1
GNU + Linux 사용자가 Windows 전용 Visual Studio 용 프로젝트 파일을 생성하려는 경우이 답변 을 염두에 두십시오. 요약 : 생성기는 플랫폼별로 다르며이를 수행하려면 Windows에 있어야합니다.
code_dredd

답변:


57

CMake는 실제로 이것에 꽤 좋습니다. 핵심 부분은 Windows 측의 모든 사람이 솔루션에로드하기 전에 CMake를 실행해야한다는 것을 기억해야하고, Mac 측의 모든 사용자는 make 전에 실행하는 것을 기억해야한다는 것입니다.

가장 어려운 부분은 Windows 개발자로서 구조적 변경 사항이 솔루션 또는 프로젝트 파일이 아닌 cmakelist.txt 파일에 있는지 확인하는 것이 었습니다. 이러한 변경 사항은 손실 될 수 있으며 손실되지 않더라도 Mac 측으로 전송되지 않습니다. 또한 그것들이 필요했고, Mac 사용자들은 같은 이유로 make 파일을 수정하지 않는 것을 기억해야 할 것입니다.

약간의 생각과 인내가 필요하지만 처음에는 실수가있을 것입니다. 그러나 양측에서 지속적인 통합 을 사용하는 경우 이러한 것들은 조기에 흔들리고 결국 사람들은 습관이 될 것입니다.


11
한 번 사실이라면 더 이상 그렇지 않습니다. CMakeLists.txt를 변경하면 빌드 시스템 (Visual Studio 용 프로젝트 파일, 메이크 파일 등)이 다시 생성됩니다. Visual Studio 내의 워크 플로는 변경된 사항을 감지 할 때 Visual Studio가 프로젝트 파일을 다시 생성하지 않고 대신 빌드를 중단해야하기 때문에 대화 상자가 표시 될 때까지 기다립니다. -프로젝트 파일을로드합니다.
Vitali

1
이에 대한주의 사항은 IDE를 통해 Visual Studio 컴파일러를 실행할 필요가 없다는 것입니다. 명령 줄에서 실행할 수 있습니다.C:\...> MSBuild ALL_BUILD.vcxproj
PfunnyGuy 2017

2
@PfunnyGuy 참조 cmake --build ..
detly

@detly 감사합니다! 나는 실제로 그것을 발견하고 cmake --build . --config Debug -- /nologo /verbosity:minimal /m. . target run_testsgoogletest 단위 테스트를 실행하기 위해 after 를 삽입 하고 "Debug"를 "Release"로 바꿀 수 있습니다. (디버그를위한 설정 옵션을 추가하면 기본값으로, 선택 사항이지만, 나는 그것이 "릴리스"를 교환 할 수있는 방법을 보여주기 위해 그것을 포함)
PfunnyGuy

48

질문과 직접 ​​관련이 있는지 확실하지 않지만 cmake 프로젝트에서 * .sln을 생성하는 방법에 대한 답변을 찾고 있었는데 다음과 같은 것을 사용할 수 있음을 발견했습니다.

cmake -G "Visual Studio 10"

이 예제는 입력 CMakeLists.txt 파일에서 필요한 VS 2010 파일을 생성합니다.


1
에서 stackoverflow.com/questions/11269833/... 이 최상위 CMakeLists.txt과 같은 폴더에있는 파일 PreLoad.cmake에 투입 할 수있다 다음 방금 할 수 밖에 있다는 @Ivan 점 cmake.
PfunnyGuy

25

우리 부서의 빌드 체인을 CMake로 옮겼고, 프로젝트 파일을 사용하고 해당 파일을 솔루션으로 가져 오는 데 익숙한 다른 부서 이후 몇 가지 내부 문제가있었습니다. 또한 CMake가 Visual Studio 프로젝트 / 솔루션 관리자에 완전히 통합되지 않는다는 불만이 있었기 때문에 파일을 CMakeLists.txt에 수동으로 추가해야했습니다. 이것은 사람들이 익숙한 워크 플로우의 큰 단절이었습니다.

그러나 일반적으로 그것은 매우 부드러운 전환이었습니다. 더 이상 프로젝트 파일을 다룰 필요가 없기 때문에 매우 기쁩니다.

프로젝트에 새 파일을 추가하는 구체적인 워크 플로는 정말 간단합니다.

  1. 파일을 만들고 올바른 위치에 있는지 확인하십시오.
  2. CMakeLists.txt에 파일을 추가합니다.
  3. 짓다.

CMakeLists.txt 파일이 변경되면 CMake 2.6이 자동으로 다시 실행됩니다 (그리고 (반) 자동으로 솔루션 / 프로젝트를 다시로드합니다).

소스 외부 빌드를 수행하는 경우 빌드 디렉터리에 소스 파일을 만들지 않도록주의해야합니다 (Visual Studio는 빌드 디렉터리에 대해서만 알고 있기 때문에).


9

Alex가 말했듯이 매우 잘 작동합니다. 유일한 까다로운 부분은 Visual Studio 내에서가 아니라 cmake 파일을 변경하는 것을 기억하는 것입니다. 따라서 모든 플랫폼에서 워크 플로는 일반 이전 메이크 파일을 사용한 경우와 유사합니다.

그러나 작업하기가 매우 쉽고 cmake가 잘못된 파일을 생성하는 데 문제가 없었기 때문에 너무 걱정하지 않을 것입니다.


9

CMake는 Visual Studio 프로젝트 및 솔루션을 원활하게 생성합니다. CMake 파일을 변경하지 않고도 다른 Visual Studio 버전에 대한 프로젝트 / 솔루션을 생성 할 수도 있습니다.

소스 파일을 추가하고 제거하는 것은 CMakeLists.txt 목록이있는 파일 하고 프로젝트 / 솔루션을 다시 생성하는 문제입니다. 디렉토리의 모든 소스를 찾는 globbing 기능도 있습니다 (주의해서 사용해야하지만).

다음 링크는 CMake 및 Visual Studio 특정 동작을 매우 잘 설명합니다.

CMake 및 Visual Studio


그 링크와 샘플 프로젝트는 매우 유용합니다. 감사합니다! 예를 들어 CMake 프로젝트가 솔루션과 동일하고 add_executable 과 같은 것을 사용하여 Visual Studio 프로젝트에 해당하는 것을 추가 한다고 언급하는 등 github 저장소의 일부 소스 코드를 답변에 통합하는 것이 좋습니다 .
jrh

5

CMake는 정말 멋진 Visual Studio .projs/를 생성 할 수 .slns있지만, 항상 / .cmake대신 파일 을 수정해야하는 문제가 있습니다. 현재로서는 다음과 같이 처리하고 있습니다..proj.sln

  1. 모든 소스 파일은로 이동하고 /srcVisual Studio에 표시되는 파일은 .filter.
  2. 프로그래머는 /src기본 프로젝트의 디렉토리가 아닌 정의 된 디렉토리에서 작업하는 것을 기억하는 파일을 추가 / 삭제합니다 .
  3. 작업이 완료되면 각 항목을 "새로 고침"하는 스크립트를 실행합니다. .cmake 파일 합니다.
  4. 그는 코드가 재생성 된 환경에서 빌드 될 수 있는지 확인합니다.
  5. 그는 코드를 커밋합니다.

처음에 우리는 그것이 어떻게 될지 조금 두려웠지만, 워크 플로는 정말 잘 작동하고 각 커밋 전에 멋진 차이를 볼 수 있으므로 모든 사람이 자신의 변경 사항이 .cmake파일에 올바르게 매핑되었는지 쉽게 확인할 수 있습니다 .

알아야 할 또 하나의 중요한 점 은 CMake의 "Solution Configurations"에 대한 지원 ( afaik ) 이 없다는 것입니다 . 현재로서는 프로젝트 / 솔루션이있는 두 개의 디렉토리 를 생성해야합니다. 각 빌드 유형 (디버그, 릴리스 등)에 대해 하나씩. 더 정교한 기능에 대한 직접적인 지원은 없습니다. 즉, 구성을 전환해도 예상 한 바를 얻을 수 없습니다.


4
CMake 2.8.10부터 생성 된 솔루션에는 4 개의 사용자 지정 빌드 구성이 있으며 추가 사용자 지정 구성을 정의하기위한 지원이 있습니다.
John


0

syncProj라는 내 프로젝트를 시작했습니다. 여기에서 문서 / 다운로드 링크 :

https://docs.google.com/document/d/1C1YrbFUVpTBXajbtrC62aXru2om6dy5rClyknBj5zHU/edit# https://sourceforge.net/projects/syncproj/

Visual Studio를 개발에 사용할 계획이고 현재 C ++ 만 지원되는 경우.

다른 make 시스템에 비해 주요 장점은 C # 기반이므로 스크립트를 실제로 디버깅 할 수 있다는 것입니다.

syncProj에 익숙하지 않은 경우 솔루션 / 프로젝트를 .cs 스크립트로 변환하고 그 시점부터 추가 개발을 계속할 수 있습니다.

cmake에서는 모든 것을 처음부터 작성해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.