2013-05-17 2 views
1

Рассмотрите следующую ситуацию: я хочу включить определенную библиотеку через ExternalProject_Add. Я хочу создать библиотеки выпуска и отладки. Мой план состоял в том, чтобы сначала создать библиотеки релизов, а затем повторно использовать загруженный исходный код для создания библиотек отладки. Я не хочу дважды загружать исходный код - это пустая трата. Соответствующая часть из моего CMakeLists.txt выглядит так:cmake повторное использование ExternalProject - DEPENDS не работает?

ExternalProject_Add(
installSFMLRelease 
      PREFIX ${TMPDIR} 
      DOWNLOAD_DIR ${TMPDIR}/SFML 
      GIT_REPOSITORY git://github.com/LaurentGomila/SFML.git 
      GIT_TAG 2.0 
      CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${SFML_INSTALL_PREFIX} 
      CMAKE_GENERATOR ${CMAKE_GENERATOR} 
      UPDATE_COMMAND "") 

ExternalProject_Add(
installSFMLDebugAndDocs 
      DEPENDS installSFMLRelease 
      URL file://${TMPDIR}/SFML 
      SOURCE_DIR ${TMPDIR}/SFML 
      CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${SFML_INSTALL_PREFIX} -DCMAKE_BUILD_TYPE:STRING=Debug -DSFML_BUILD_DOC:BOOL=TRUE)    

Угадайте, что? Это не работает. Ошибка CMake с

3>CUSTOMBUILD : CMake error : The source directory "C:/Windows/Temp/SFML" does not 

похоже, содержит CMakeLists.txt.

Проблема в том, что каталог действительно не содержит ничего, потому что installSFMLRelease не был запущен раньше. Как я могу получить поле DEPENDS?

ответ

0

Я пробовал это с libgit; git clones прямо в $ {TMPDIR}/src/installLIBGITRelease без использования DOWNLOAD_DIR, поэтому в DOWNLOAD_DIR нет CMakeLists.

0

Во-первых, я не уверен, что ваши цели будут встречены здесь. Если вы создадите installSFMLRelease из MSVC в режиме отладки, вы получите сборку Debug. И наоборот для выпуска сборки installSFMLDebugAndDocs. Переменная CMAKE_BUILD_TYPE не влияет на генераторы с несколькими конфигурациями, такие как MSVC.

Возможно, вам лучше указать разные пути установки для разных конфигураций?

Тем не менее, чтобы ответить на ваш вопрос, аргумент DOWNLOAD_DIR применим только при использовании в сочетании с аргументом URL. Документы для ExternalProject на самом деле не делают этого ясно, но this article, возможно, проливает немного больше света.

Чтобы исправить это, я думаю, что вы можете пропустить указания DOWNLOAD_DIR для installSFMLRelease, пропустить весь этап загрузки для installSFMLDebugAndDocs и вместо того, чтобы получить значение SOURCE_DIR для installSFMLRelease и передать это отладочной версии:

ExternalProject_Add(
    installSFMLRelease 
    PREFIX ${TMPDIR} 
    
             
  
    DOWNLOAD_DIR ${TMPDIR}/SFML 
   
    GIT_REPOSITORY git://github.com/LaurentGomila/SFML.git 
    GIT_TAG 2.0 
    CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${SFML_INSTALL_PREFIX} 
    CMAKE_GENERATOR ${CMAKE_GENERATOR} 
    UPDATE_COMMAND "") 

ExternalProject_Get_Property(installSFMLRelease source_dir) 

ExternalProject_Add(
    installSFMLDebugAndDocs 
    DEPENDS installSFMLRelease 
    DOWNLOAD_COMMAND "" 
    
             
  
    URL file://${TMPDIR}/SFML 
   
    
             
  
    SOURCE_DIR ${TMPDIR}/SFML 
   
    SOURCE_DIR ${source_dir} 
    CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${SFML_INSTALL_PREFIX} 
       -DCMAKE_BUILD_TYPE:STRING=Debug 
       -DSFML_BUILD_DOC:BOOL=TRUE) 

Смежные вопросы