Компиляция OMake с подкаталогами

Просматривая документацию OMake, кажется, что всякий раз, когда используются источники из подкаталогов, они всегда сначала компилируются в статические библиотеки. Всегда ли это необходимо? Могу ли я скомпилировать и скомпоновать все без создания библиотек? Я пытался написать OMakefiles для этого, но безуспешно.

Пример структуры каталога:

мой проект: OMakeroot, OMakefile, main.cpp

мой проект/заголовки: file1.h

мой проект/источник: файл1.cpp


содержимое моего проекта OMakeroot:

открыть сборку/С

.ПОДКАТЫ: .

Содержимое моего проекта Omakefile:

СХХ = г++

CXXFLAGS = -Стена

ВКЛЮЧАЕТ += заголовки src

CXXProgram (мое приложение, основной файл1)


OMakefiles в директориях headers и src пустые, не уверен, что в них что-то должно быть.

Когда я запускаю omake myapp, я получаю сообщение об ошибке:

Не знаю, как собрать "file1.o", необходимый для "myapp"


person Community    schedule 05.07.2009    source источник


Ответы (3)


Для справки в будущем, если поток исчезнет, ​​вот решение, опубликованное в потоке, на который ссылается Maxicat (переформулировано, чтобы показать только решение).

Это не случай, когда вам нужно компилировать в статические библиотеки, но по умолчанию предполагается, что каждый объектный файл находится в том же каталоге, что и исходный файл.

ВКЛЮЧАЕТ += источник заголовков

INCLUDES предназначен только для заголовочных файлов. Тебе нужно

INCLUDES += $(dir headers)
.SUBDIRS: src

(Примечание 1. Порядок предыдущих двух строк важен. Как я написал, каталог src получит обновленные INCLUDES; если вы этого не хотите, измените порядок двух.)

(Примечание 2. В приведенном выше примере предполагается файл src/OMakefile, хотя подойдет и пустой. Вы можете написать что-то вроде

.SUBDIRS: src
   return # A no-op body

чтобы "встроить" ./src/OMakefile в ./OMakefile)

CXXProgram(myapp, main file1 )

Должно быть

CXXProgram(myapp, main src/file1)
person a_m0d    schedule 13.08.2009

Попробуйте src/file1, чтобы omake знал, что ему нужно построить src/file1.o вместо file1.o, и поэтому ему нужно src/file1.cpp вместо file1.cpp (которого не существует).

person Steve Jessop    schedule 05.07.2009

Это решено в списке рассылки Omake, ссылка на тему здесь только для полноты картины: http://lists.metaprl.org/pipermail/omake/2009-July/002094.html

person Community    schedule 13.07.2009