Я пытаюсь скомпилировать мои CPP файлы, потому что отсутствует заголовочный файл. Я знаю, что это отсутствует, потому что я хочу создать это. Как?
Вот что у меня так далеко. Проблема заключается в том, что когда «the_header.hpp» используется в нескольких CPP файлах, рекурсивные вызовы make неэффективны (и не являются удовлетворительными), так как заголовки, включенные в «the_header.hpp», кажутся перестроенными несколько раз из-за параллелизма .
CPP файлов%. cpp:
#include "the_header.hpp"
// ...
Мой Makefile:
#
include *.g *.d
# *.g like generator
%.g: %.cpp
g++ -MM -MF $@ -MP -MG -MT $@ $<
make $@
#
%.d: %.g ;
#
%.o : %.cpp %.d
// g++ with auto-dependencies generation
# the_header.hpp matches
%.hpp : %.lcm
// Generate it
И только чтобы очиститься от моих намерений : когда я компилирую CPP файлы, я генерирую файлы% .g, цель которых добавит дополнительные предпосылки для себя. В результате рекурсивный вызов увидит «the_header.hpp» как необходимое условие (а не обновленное), сгенерирует его и создаст% .g. Рекурсивный вызов покажет «the_header.hpp» в актуальном состоянии, ничего не делать, конец рекурсии. Процессы компиляции.
Более того, "the_header.hpp" - это файл, сгенерированный LCM с lcmgen из файла% .lcm.
Перед этим у меня было просто (что прекрасно работает с параллелизмом, но не является удовлетворительным):
#
%.o : %.cpp %.d $(patsubst %.lcm,%.hpp,$(wildcard *.lcm)
Не зная, какие файлы lcm действительно использовались. Кроме того, я смешал проекты C и C ++, которые могут привести к:
# lcmgen can be used with both C++ or C...
%.o : %.cpp %.d $(patsubst %.lcm,%.hpp,$(wildcard *.lcm) $(patsubst %.lcm,%.h,$(wildcard *.lcm)
Надеюсь, вам будет интересно!