LINUX.ORG.RU

[cmake] подпроекты

 


0

1

Уважаемый ALL,

дана структура каталогов:

test/
  CMakeList.txt
  test1/
     *.cpp
     *.h
    CMakeList.txt
  test2/
     *.cpp
     *.h
    CMakeList.txt
В самой папке tests исходников нет. файлы CMakeList.txt в папках test1 и test2 генерят то, что надо, если вызывать из консоли.
Как собрать тесты test1 и test2 в рамках одного проекта?
Причем, в каком-то случае test1, в каком-то test1 и test2 (в общем, выбор варианта не проблема - про if-then знаю))) ).

add_subdirectory( test1 EXCLUDE_FROM_ALL )
add_subdirectory( test2 EXCLUDE_FROM_ALL )

option( BUILD_TEST1 "Whether to build Test1" ON )
option( BUILD_TEST2 "Whether to build Test2" ON )

add_custom_target( Tests ALL )

if ( BUILD_TEST1 )
    add_dependencies( Tests Test1 )
endif()

if ( BUILD_TEST2 )
    add_dependencies( Tests Test2 )
endif()

Вместо Test1/Test2 подставить реальные названия целей.

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

Чтобы разжевать. BUILD_TEST1 и BUILD_TEST2 появятся в кеше. С помощью cmake-gui или ccmake можно будет интерактивно поставить галочки что собирать, а что нет.

Или из консоли (к примеру):

$ cmake BUILD_TEST1=OFF BUILD_TEST2=ON .

Dendy ★★★★★
()

Я использую макрос

macro (add_subdirectory_if_exists _subdir)
  if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${_subdir})
    add_subdirectory (${_subdir})
  endif ()
endmacro(add_subdirectory_if_exists)

Использование:

add_subdirectory_if_exists(test1)

соответственно если директории test1 нет, то и проект такой собираться не будет

Reset ★★★★★
()
Ответ на: комментарий от Dendy

То, что надо!
Всем спасибо за участие!)

spike_by
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.