2016-06-11 5 views
1

я получил следующую структуру каталогов:Есть ли способ избежать рекурсивного создания с благородством?

Makefile.am 
src/ 
    mymod/ 
     mod.cc 
     submod/ 
      submod.cc 
inc/ 
    Makefile.am 
    mymod/ 
     mod.hh 
     submod/ 
      submod.hh 

Используя Autotools, я хотел бы, чтобы распространять как библиотеку, сделанную из src и заголовков в inc. Верхний уровень Makefile.am выглядит что-то вроде

lib_LTLIBRARIES = mylib.la 
mylib_la_SOURCES=./mymod/mod.cc\ 
       ./mymod/submod/submod.cc 
SUBDIRS=inc 

inc/Makefile.am Тогда имеет

mymod_includedir=$(includedir) 
nobase_mymod_include_HEADERS=mymod/mod.hh\ 
          mymod/submod/submod.hh 

Это хорошо работает. Я получаю все содержимое библиотеки, и мои заголовки устанавливаются соответствующим образом. Однако я хотел бы исключить рекурсию в Makefile. Проблема заключается в том, что если я перееду строки в inc/Makefile.am в корневой каталог, то я должен обновить пути следующим образом:

mymod_includedir=$(includedir) 
nobase_mymod_include_HEADERS=inc/mymod/mod.hh\ 
          inc/mymod/submod/submod.hh 

Это приводит мои заголовки получать сбрасывали в $PREFIX/include/inc/mymod/mod.hh и не $PREFIX/include/mymod/mod.hh, как я хочу. Я знаю, что мог бы сделать что-то вроде

mymodincludedir=$(includedir)/mymod 
mymod_HEADERS=inc/mymod/mod.hh 

mysubmodincludedir=$(includedir)/mymod/submod 
mysubmod_HEADERS=inc/mymod/submod/submod.hh 

но это довольно болезненно, потому что есть много подкаталогов, и больше подкаталогов в подкаталогах (мы распределяя код 3-го участника, которые нуждаются в наши собственные заголовки) , То, что я хотел бы сделать, это либо сказать automake, чтобы просто скопировать каталоги в /inc в $(includepath) вместе с каждым подкаталогом, с которым он встречается внутри, или сообщить ему, чтобы он только отделял часть пути от файлов заголовков, которые я перечисляю. Это возможно?

ответ

0

Я думаю, что ближайший вы найдете Karel Zak's Makemodule.am approach, для которого nobase_ будет работать по вашему усмотрению.

+0

Не могли бы вы немного разобраться? Подход Makemodule.am - это то, что я использую. Как я могу использовать nobase? Из того, что я понимаю, я все же должен указать полный путь, поэтому я все еще сталкиваюсь с теми же проблемами, о которых упоминалось в моем вопросе. – jonthalpy