문제

CMAKE 문서에 명시된대로 add_custom_command 지시문을 사용하여 CMAKE에 대한 구축 후 명령을 설정하려고합니다. 그래도하고 싶은 것은 실행 파일의 릴리스 빌드를 작성하는 경우 만 빌드 후 실행하는 것입니다.

이것을 어떻게 달성합니까?

도움이 되었습니까?

해결책

MakeFile 기반 발전기의 경우 확인할 수 있습니다 CMAKE_BUILD_TYPE 변수 및 그 가치에 따라 행동하십시오.

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()

Visual Studio 기반 빌드의 경우 이렇게 질문 그것을 제안하는 것 같습니다 CMAKE_BUILD_TYPE 또한 VS 2005+에서도 작동합니다.

다른 팁

DLL 파일을 대상 디렉토리에 복사하고 릴리스 빌드에 대해서만 비슷한 내용을 다루었습니다. 찢어진 머리카락을 많이 후에 나는 몇 개의 발전기 표현식 ( $<...> 사물). 나는 7 년 후에 당신의 문제를 해결하기 위해 그다지 많지는 않지만 (나는 당신의 수준에 감탄하지만),이 같은 문제를 가진 다음 사람의 두개골 머리를 저장하고 Google 에서이 질문을 찾기 위해 :

set(no_copy $<NOT:$<CONFIG:Release>>) # An abbreviation to make the example easier to read.
add_custom_command(TARGET myDLL POST_BUILD
    COMMAND "${CMAKE_COMMAND}" -E
    # do nothing for non-Release build
    $<${no_copy}:echo>
    # output text to make clear that the copy command is not actually issued
    $<${no_copy}:"copy omitted for non-release build, command would have been ">
    # the actual copy command, which is overridden by the "echo" above
    # in the case of a non-release build
    copy_if_different $<TARGET_FILE:myDLL> ${DIR_FOR_DLL})

속임수는 an을 쓰는 것입니다 echo 그렇지 않으면 발행 될 명령 앞에서. 이런 식으로 약간의 노이즈가 출력 되더라도 명령은 실행되지 않습니다. 완전히 읽을 수없는 Cmake 파일을 희생시키면서 출력을 단축하기 위해 여러 발전기 표현식에 명령 줄의 나머지를 동봉 할 수 있습니다. 다른 한편으로는 출력을 생성하지 않고도 복사본을 휴대 할 수있는 방법으로 억제 할 방법이없는 것 같습니다. 마지막으로, 쉬운 일이 있다고 생각하면 글을 쓸 수 있습니다. if($<CONFIG:Release>) ... endif(), 나는 당신에게 실망을 아끼는 것을 조언합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top