2011-08-16 1 views
3

좋아, CMake를 사용하여 ARM 타겟 용으로 Linux에서 C++를 빌드하십시오. DEBUG라는 .h 파일 중 하나에 #DEFINE이 있습니다. 설정이 끝나면 일련의 추적을위한 다양한 방법을 빌드에 추가합니다. 예를 들면 다음과 같이 할 수 있습니다. 이 #DEFINE 세트를 사용하여 빌드 할 "make debug"를 만들고 설정하지 않고 정상 "make"빌드를하십시오. 이것이 가능한가?CMAKE - 디버그/크로스 빌드?

또한 CMake에 대상을 지정할 수 있습니까? 필자는 현재 CMakeLists.txt가 2 개 있고, 하나는 Armel 용이고 다른 하나는 Armel 용입니다 (ARM의 경우, 크기가 최적화 된 이진 파일을 원하는 x86에 비해 디버그 정보를 사용하여 빌드하는 것과 같은 다양한 옵션이 있습니다).

+2

표준 에티켓처럼 프로젝트 파일을 생성의 프로젝트 명령 앞에 다음 코드를 추가 게시물 당 하나의 질문 만 넣는 것입니다 : http://meta.stackexchange.com/questions/39223/one-post-with-multiple-questions-or-multiple-posts, 답은 다음과 같습니다. "수락 됨" –

답변

1

에 관한 정의는, 당신은 당신이 당신의 CMakeLists.txt 파일에 다음과 같이 원하는 것을 할 수 있습니다

if(CMAKE_BUILD_TYPE MATCHES "[Dd][Ee][Bb][Uu][Gg]") 
    message("INFO: DEBUG BUILD") 
    # for debug type builds, turn on verbose makefiles 
    SET(CMAKE_VERBOSE_MAKEFILE ON) 

    # Tell other CMake files that we're doing a debug build 
    SET(DEBUG_BUILD 1) 

    # Tell C/C++ that we're doing a debug build 
    ADD_DEFINITIONS(-DDEBUG) 
endif() 

if(CMAKE_BUILD_TYPE MATCHES "[Rr][Ee][Ll][Ee][Aa][Ss][Ee]") 
    message("INFO: RELEASE BUILD") 
endif() 

CMake는 동일한 빌드 트리에, 즉, 두 툴체인을 두 가지 목표를 지원 좋아하지 않는다. 어쨌든 이것을 필요가 없습니다. 가능한 각 대상에 대해 하나의 빌드 트리로 트리 외부 빌드를 사용해야합니다. 이런 식으로 :

cd /path/to/x86_build 
cmake /path/to/src/x86/CMakeLists.txt 
cd /path/to/Armel_build 
cmake /path/to/src/Armel/CMakeLists.txt 
1

디버그 및 릴리스 빌드는 CMake가 기본적으로 지원합니다.

프로젝트의 최상위 CMakeLists.txt이 ~/프로젝트 /는 foobar에서, 별도의 디버그를 만들 수 있습니다 말과 방출이 수행하여 빌드 :

mkdir ~/project/build 

mkdir ~/project/build/foobar-debug 
cd ~/project/build/foobar-debug 
cmake -DCMAKE_BUILD_TYPE:STRING=Debug ~/project/foobar 

mkdir ~/project/build/foobar-rel 
cd ~/project/build/foobar-rel 
cmake -DCMAKE_BUILD_TYPE:STRING=Release ~/project/foobar 

무엇도 더 나은 것은 CMake가되지 지원입니다 아마 당신이 익숙한 표준 디버그/릴리스 타겟 일 수도 있지만 디버그 정보로 릴리즈하는 것은 물론 최소 크기의 릴리즈를 지원합니다. 다음 위치의 CMAKE_BUILD_TYPE에 대한 다른 옵션을 참조하십시오. http://cmake.org/Wiki/CMake_Useful_Variables

+0

아니 었어? t 내가 후에했지만 아주 잘 알고있다. –

2

두 가지 질문이있는 것 같습니다. 하나의 디버그에 대해서는 CMAKE_BUILD_TYPE을 사용하여 디버그/릴리스 설정을 분리하고 $ cmake --build . --config Release 또는 $ cmake --build . --config Debug을 사용하여 컴파일 할 수 있습니다.

두 번째로는 크로스 빌드가 가능합니다. 당신은 다음과 같이 수행 할 수 있습니다

  1. 따르면 this guide 쓰기 구성 파일을 ARM과 x86 용 각각 컴파일러, 아카이브, 등 가정 해 이름을 설정 * config_x86.cmake *와 * config_arm.cmake 등 86 중 하나 * 팔을 위해서.
  2. * MY_TARGET *과 같은 cmake 매크로를 정의하십시오. 그리고

    if (${MY_TARGET} STREQUAL "x86") 
        include(config_x86.cmake REQUIRED) 
    elseif (${MY_TARGET} STREQUAL "arm") 
        include(config_arm.cmake REQUIRED) 
    endif() 
    
  3. 그런 다음이

    $ cmake -DMY_TARGET = 86 "당신의 코드 디렉토리"

+0

나는 이것을 사용하여 예를 들어 헤더에 #define의 값을 설정했다. CONFIGURE_FILE ($ {CMAKE_SOURCE_DIR} /src/flags.h.cmake $ {CMAKE_SOURCE_DIR} /src/flags.h) –