Генерация «чистой» цели для подкаталога в CMake - PullRequest
1 голос
/ 15 ноября 2011

Я хочу сгенерировать цель clean для подкаталога.

Моя структура проекта выглядит следующим образом:

app/
  A
  B

lib/
   A
   B
   C

Иногда я хочу запустить чистую толькоapp / A и не хочет очищать библиотеку.

Можно ли указать CMake сгенерировать цель clean для каждого каталога?

Или пользовательскую целькак app-clean , который будет вызывать clean в каждом подкаталоге приложения?

Ответы [ 2 ]

4 голосов
/ 15 ноября 2011

Вы можете просто перейти к $ {CMAKE_BINARY_DIR} / app / A и запустить make clean там.

Конечно, вы можете добавить add_custom_target (app-A-clean ...), который сделает это за вас.

macro(add_clean_target dir)
add_custom_target(clean-${dir} COMMAND ${CMAKE_MAKE_PROGRAM} clean WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${dir})
endmacro(add_clean_target)

Теперь вы можете использовать его таким образом:

add_clean_target(app-A)
2 голосов
/ 15 ноября 2011

Возможно, попытайтесь настроить свой CMakeLists.txt так, чтобы в каждом каталоге был проект , и "корневой" CMakeLists.txt, который просто делает add_subdirectory для всех подпроектов. ... тогда CMake сгенерирует файл решения или makefile в каждом каталоге проекта. Затем вы можете "зайти в" такой каталог и создать и очистить один проект.

Например, в одном из моих проектов у меня есть следующая структура:

projectroot/
  applications/
    appA
  libraries/
    libA
    libB

В projectroot я настроил CMakeLists.txt так:

project(MyProject)
add_subdirectory(libraries)
add_subdirectory(applications)

В libraries/ я делаю следующее:

project(Libraries)
add_subdirectory(libA)
add_subdirectory(libB)
add_subdirectory(libC)

А затем в applications/:

project(Applications)
add_subdirectory(appA)

В этом случае я могу войти в projectroot/applications/appA и вызвать make или msbuild appA.sln, и он начнет сборку libA, B, C и затем appA. Точно так же вы можете позвонить make clean или msbuild /t:Clean appA.sln.

Дополнительным преимуществом дополнительного каталога для всех библиотек является то, что я могу создать их сразу, запустив make или msbuild libraries.sln в libraries/ dir.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...