2014-02-25 7 views
10

현재 CMake를 사용하여 많은 Visual Studio 2013 프로젝트를 만들고 있습니다. 그러나 자동 생성 된 ZERO_CHECK 및 ALL_BUILD 프로젝트는 유니 코드 문자 세트를 사용하기를 원하지만 기본적으로 MBCS를 사용하도록 설정됩니다. Cmake가 생성 한 ALL_BUILD 및 ZERO_CHECK Visual Studio 2013 프로젝트에서 유니 코드를 문자 집합으로 설정하는 방법은 무엇입니까?

나는 다음 내 프로젝트에 대한 유니 코드 문자 세트의 사용을 지정했다 :

ADD_DEFINITIONS(-DUNICODE) 
ADD_DEFINITIONS(-D_UNICODE) 

를하고는했다. 내 프로젝트 설정하기 전에

ADD_DEFINITIONS(-DUNICODE) 
ADD_DEFINITIONS(-D_UNICODE) 

하지만 전혀 ZERO_CHECK 및 ALL_BUILD에 영향을 미치지 않았다 : 심지어

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /UMBCS /D_UNICODE /DUNICODE") 

나 : 내가 좋아하는 뭔가 C++ 컴파일러 플래그를 설정하기 위해 노력했다. 어떤 아이디어?

+0

처음부터 ALL_BUILD 및 ZERO_CHECK 프로젝트를 변경하려는 이유가 무엇입니까? 그것들은 메타 프로젝트 일 뿐이며 거기에있는 설정은 생성되는 코드에 영향을 주어서는 안됩니다. – ComicSansMS

+0

@ComicSansMS 그럼 Windows MFC를 사용하고 있는데 Zero_PROJECT가 다른 것보다 먼저 컴파일되기 때문에이 오류 메시지가 나타납니다. 유니 코드가 아닌 문자 집합에 대한 MFC 프로젝트를 작성하는 것이 더 이상 사용되지 않습니다.프로젝트 속성을 유니 코드로 변경하거나 추가 라이브러리를 다운로드해야합니다. 자세한 내용은 http://go.microsoft.com/fwlink/p/?LinkId=286820을 참조하십시오. CMake를 자주 사용하면 매번 수동으로 문자를 유니 코드로 설정해야합니다. 그것은 내 관점에서 볼 때 정말로 짜증 스럽습니다. –

답변

3

해결책을 찾았습니다.

마이크 덕분에 나는 잘못된 방향으로 탐색하고 있음을 깨달았습니다. CMake는 메타 타겟에 접근 할 수 없으므로 (이유를 이해할 수있다.) 은 MBCS로 MFC를 컴파일하기 위해 Visual Studio 환경을 설정해야한다.

This link은 MFC 프로젝트의 기본 MBCS 지원을 제거한 이유와 this link이 MFC-MBCS 패키지 다운로드를 제공하는 이유를 설명합니다.

필자는 여전히 프로젝트에서 유니 코드를 사용하기를 원하므로 적절하게 CMake 플래그를 사용합니다. 그러나 ZERO_PROJECT 및 ALL_BUILD는 이제 제대로 컴파일됩니다.

나는 결국 빛을 보게 만든 Raman Sharma's post입니다.

당신 덕분에 내 하루를 만들었습니다. D

최고 감사합니다!

RL

0

ZERO_CHECKALL_BUILD은 메타 표적이다. 모든 프로젝트가 ZERO_CHECK에 의존하고 모든 프로젝트의 종속성이 ALL_BUILD이지만이 두 프로젝트 자체는 라이브러리 나 실행 파일을 생성하지 않으므로 빌드 설정에 신경 쓸 필요가 없습니다.

다른 메타 - 타겟이있을 수도있다. install() 기능을 사용하는 경우 INSTALL.

+0

그 의미는 CMake를 통해 나는 그러한 메타 - 타겟에 대해 아무런 통제력이 없다는 것을 의미합니까? Visual 2013 프로젝트의 기본 문자 집합으로 유니 코드를 자동으로 넣는 방법이 있습니까? 또는 CMake를 사용하여 솔루션을 재생성 할 때마다 수동으로 매개 변수를 설정해야합니까? 어쨌든, 고마워요. –

+0

예, 대상을 제어 할 권한이 없습니다. 한 번에 모든 타겟에 플래그를 추가하는 것과 마찬가지로 최상위 CMakeLists.txt에서'add_definitions()'를 한 번 호출하면됩니다. 나중에 add_subdirectory()를 통해 추가 된 모든 프로젝트는 그 정의를 상속받습니다. –

2

당신은 유니 코드 characterset로 설정하여 프로젝트를 빌드 할 cmake --build . -- /p:CharacterSet=Unicode를 사용할 수 있습니다. 실제로이 방법으로 매개 변수를 전달하여 CMake가 아니라 MSBuild 자체에 전달합니다.