2009-10-25 9 views
3

CMake 설명서에 설명 된대로 ADD_CUSTOM_COMMAND 지시문을 사용하여 CMake에 대한 빌드 빌드 명령을 설정하려고합니다. 비록 내가 실행 파일의 릴리즈 빌드를 생성하고 있다면, 내가하고 싶은 것은 포스트 빌드 만 실행하는 것이다.릴리스 빌드 전용 빌드 단계 게시

어떻게 수행하나요? 메이크 기반 발전기

답변

2

당신은 그 값시 CMAKE_BUILD_TYPE 변수 행동을 확인할 수 있습니다 기반의 Visual Studio를 들어

if(CMAKE_BUILD_TYPE STREQUAL Debug) 
    message(STATUS "Do debug stuff") 
elseif(CMAKE_BUILD_TYPE STREQUAL Release) 
    message(STATUS "Do release stuff") 
elseif(CMAKE_BUILD_TYPE STREQUAL RelWithDebInfo) 
    message(STATUS "Do release with debug info stuff") 
elseif(CMAKE_BUILD_TYPE STREQUAL MinSizeRel) 
    message(STATUS "Do minimal size release stuff") 
endif() 

빌드, this SO questionCMAKE_BUILD_TYPE는 VS 2005 +와 함께 작동하는 것이 좋습니다 것으로 보인다.

+0

VS2008 및 CMake 2.8을 사용하며 작동하지 않습니다. – Robert

+0

-1 : CMAKE_BUILD_TYPE은 런타임에만 정의됩니다. 이 대답은 잘못되었습니다. – Gili

+1

@Gili : 단일 구성 생성기 (Makefile 생성기)의 경우 생성시 사용할 수 있습니다. – richq

1

DLL 파일을 대상 디렉터리로 복사하려고하지만 비슷한 빌드가 필요합니다. 찢어진 머리카락이 찢어 지자 몇 개의 발전기 표현 ($<...> 개)을 사용하여 작동하도록했습니다. 나는 7 년 후 여기에 당신의 문제를 해결하지 않고 (비록 내가 당신의 수준을 존경 하겠지만), 다음 사람의 머리카락을 구하기 위해 똑같은 문제를 겪고이 질문을 구글에서 찾는다.

set(no_copy $<NOT:$<CONFIG:Release>>) 
add_custom_command(TARGET myDLL POST_BUILD 
    COMMAND "${CMAKE_COMMAND}" -E 
    # do nothing for non-Release build 
    $<${no_copy}:echo> $<${no_copy}:"copy omitted for non-release build, command would have been "> 
    # copy file for release build 
    copy_if_different $<TARGET_FILE:myDLL> ${DIR_FOR_DLL}) 

트릭 그렇지 않으면 발행 될 명령의 앞에서 echo을 작성하는 것입니다. 명령 행의 나머지 부분을 여러 생성기 표현식으로 묶어 완전히 읽을 수없는 cmake 파일 대신 출력을 줄일 수 있습니다. 다른 한편으로 출력을 생성하지 않고 이식 가능한 방식으로 복사본을 억제 할 수있는 방법이없는 것 같습니다. 마지막으로, 쉬운 일이 있다고 생각하고 을 쓸 수만 있다면 실망을 자제하는 것이 좋습니다.