2011-10-05 3 views
3

CMake (버전 2.8.5 사용)에서 다음을 어떻게 달성합니까? 나는 doc이라는 이름의 사용자 정의 타겟에 의해 생성 된 문서를 가지고있다. 그 출력은 설치하거나 CPack 할 때 포함하고 싶다.CMake에게 설치 디렉토리를 알려주는 방법은 가짜 타겟에 달려 있습니까?

add_custom_target(doc "${DOXYGEN_EXECUTABLE}" Doxyfile) 
install(DIRECTORY ${CMAKE_BINARY_DIR}/doc DESTINATION doc) 

Doxyfile${CMAKE_BINARY_DIR}/doc에서 문서를 넣어 Doxygen을 알려줍니다.

나는 빌드 디렉토리에이 작업을 수행 할 경우 : 첫 번째 줄은 install 대상이 의존하는 디렉토리를 생성하기 때문에

make doc 
cpack 

일이, 잘 작동합니다. 다음은이 ${CMAKE_BINARY_DIR}/doc을 찾을 수없는 불평

cpack 

을 : 나는 신선한 빌드가있는 경우

그러나, (그래서 ${CMAKE_BINARY_DIR}/doc은 아직 존재하지 않는), 그리고 직접 CPack를 호출

CMake Error at <snip>/build/cmake_install.cmake:36 (FILE): 
    file INSTALL cannot find "<snip>/build/doc". 

나는 또한 다음을 시도했다 :

add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/doc COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile) 
install(DIRECTORY ${CMAKE_BINARY_DIR}/doc DESTINATION doc) 

나는 아직도 얻는다. CPack 오류가 발생하여 빌드 디렉토리에 make doc을 입력해도 작동하지 않습니다.

내가 할 그래서 경우 make doc 수동이 게시물의 상단에있는 구성으로 작동하지만, 어떻게 내가 말할 수있는 cpack 전에 cmake/cpack 것을이 문서를 작성하는 일이 있도록 install 지시어는 사용자 지정 대상 doc에 따라 달라 cpack 또는 make install으로 전화 할 때 자동으로?

감사합니다.

답변

2

은 아마 당신이 ALL 키워드가 필요합니다

add_custom_target(doc ALL "${DOXYGEN_EXECUTABLE}" Doxyfile) 

업데이트 :에 사용자 지정 종속성을 추가 할 수있는 옵션을 제공하지 않습니다

현재의 cmake 내장 된 목표 (예 : all, install, test 등). 그리고 가까운 장래에이 옵션을 제공하지 않는 것 같습니다 - http://public.kitware.com/Bug/view.php?id=8438

그러나 일부 해킹/해결 방법으로 원하는 동작을 달성하는 것은 여전히 ​​가능합니다. 예를 들어 설치 단계의 시작 부분에서 make 도구를 직접 실행할 수 있습니다.

그래서 자신의 위험에 사용 : 나는 리눅스와 윈도우

install(CODE "execute_process(COMMAND ${CMAKE_BUILD_TOOL} hack WORKING_DIRECTORY \"${CMAKE_CURRENT_BINARY_DIR}\")") endif() 

모두 구축하기 위해 내 CMakeList.txt이 조금 변경되었습니다

add_custom_target(hack ${CMAKE_COMMAND} -E echo "Hacking install target") 
if("${CMAKE_GENERATOR}" MATCHES Make) 
    install(CODE "execute_process(COMMAND ${CMAKE_BUILD_TOOL} hack WORKING_DIRECTORY \"${CMAKE_CURRENT_BINARY_DIR}\")") 
endif() 
+0

고마워요, 실제로 가능한 해결책입니다. 그러나,'ALL' 키워드는 항상 타겟이 만들어지게합니다. 이 경우에는 문제가되지 않지만 설치 대상 (암시 적으로'ALL'에 종속 됨)과 내 사용자 정의 대상 사이에 명시 적 종속성을 추가 할 수있는 일반적인 솔루션에 관심이 있습니다. –

+0

@ysnikraz 답변을 업데이트했습니다. 불행히도 cmake는 커스텀과 빌트인 타겟 간의 의존성을 설정하는 확실한 방법이 없습니다. –

+0

고맙습니다. 업데이트 및 해결 방법을 알려주세요. 그냥 테스트하고 잘 작동합니다. 정확히 내가 무엇을 찾고 있었는지! –

1

이것은 내 해결책.doc 또는 설치 대상이 필요한 경우에만 항상 "모두"문서를 작성하지 않습니다 (Visual Studio에서 INSTALL 프로젝트가 컴파일 됨). 이 솔루션은 완전하지 않습니다. 예를 들어, MinGW에서는 작동하지 않지만 ...

set(DOXYFILE_OUTPUT_DIR ${PROJECT_BINARY_DIR}/doc) 
#-- Configure the Template Doxyfile 
configure_file(Doxyfile.in ${PROJECT_BINARY_DIR}/Doxyfile @ONLY IMMEDIATE) 

#-- Add a custom target to run Doxygen 
add_custom_target (doc 
    COMMAND ${DOXYGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/Doxyfile 
    SOURCES ${PROJECT_BINARY_DIR}/Doxyfile 
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
) 

if(WIN32) 
    install(
     CODE "execute_process(COMMAND ${CMAKE_BUILD_TOOL} /Build Debug ABIHex.sln /project doc.vcproj 
           WORKING_DIRECTORY \"${CMAKE_CURRENT_BINARY_DIR}\")" 
    ) 
else(WIN32) 
    install(
     CODE "execute_process(COMMAND ${CMAKE_BUILD_TOOL} --build --target doc 
           WORKING_DIRECTORY \"${CMAKE_CURRENT_BINARY_DIR}\")" 
    ) 
endif(WIN32) 

누군가에게 유용 할 것입니다.

감사합니다. 알렉스

관련 문제