2016-02-18 3 views
0

Учитывая возросшую структуру сборки. Как импортировать цель с более низкого уровня на более высокий уровень? Вот упрощенный пример:cmake: Как импортировать цель из подкаталога на более высокий уровень?

верхнего уровня CMakeLists.txt:

cmake_minimum_required(VERSION 2.8) 
add_subdirectory(sub1) 

sub1/CMakeLists.txt:

add_subdirectory(subdir) 
add_executable(foo EXCLUDE_FROM_ALL 
    foo.cpp) 

add_custom_target(both) 
add_dependencies(both DEPENDS foo bar) 

sub1/подкаталог/CMakeLists.txt:

add_executable(bar EXCLUDE_FROM_ALL 
    bar.cpp) 

В верхнем уровне все цели видны:

  • делает Foo - строит Foo
  • делают бар - строит брусок
  • сделать оба - строит Foo & бара

На нижнем уровне (sub1/subdir) только бар видна:

  • делает бар - строит бар

На среднем уровне только Foo виден как мишень:

  • делает Foo - строит Foo
  • сделать оба - сборки Foo & бар

сделать help показывает:

 
The following are some of the valid targets for this Makefile: 
... all (the default if no target is provided) 
... clean 
... depend 
... edit_cache 
... rebuild_cache 
... both 
... foo 
... foo.o 
... foo.i 
... foo.s 

Как я могу добавить бар в этот список, не двигая инструкции по сборке до уровня?

ответ

-1

Если я изменяю

add_dependencies(both DEPENDS foo bar) 

в

add_dependencies(both foo bar) 

я получаю следующий ответ на макияжем помощью в верхней папке:

The following are some of the valid targets for this Makefile: 
... all (the default if no target is provided) 
... clean 
... depend 
... edit_cache 
... rebuild_cache 
... both 
... foo 
... bar 

Имейте взгляд на документация: https://cmake.org/cmake/help/v3.3/command/add_dependencies.html

+0

Все цели доступны уже на уровне верхнего уровня. Его следующий каталог мне интересен. Удаление DEPENDS не имеет никакого значения, хотя это необязательно. –

+0

Вы правы. Можете ли вы немного рассказать о своем случае использования и почему этого недостаточно, чтобы называть «make bar» из верхней папки? – Emil

+0

Первоначально это была миграция. Рабочий процесс перед переключением на cmake состоял в том, чтобы работать внутри дерева, содержащего подпроект, и строить цели оттуда. Это, конечно, старый стиль «в исходном дереве», который строится, но в принципе это должно быть возможно. Это также должно быть возможным из подкаталога дерева сборки в исходной сборке. –

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