2014-11-14 2 views
-4

Я хочу скомпилировать около 100 и 100 файлов .h .cpp.FreeBSD Gnu Makefile

Как создать файл GNU Makefile для компиляции под FreeBSD.

Я имею в виду, что я не знаю, как создавать зависимости, lib, компоновщик.

Вы должны скомпилировать и .cpp .c .o .h

И я никогда не использовал GNU Makefile.

+0

Если речь идет только о компиляции 'for a in * .cpp; do g ++ -c $ a; done' ;-) , Но я думаю, это не то, что вы ищете. Более конкретно. – Oncaphillis

ответ

0

Вот файл makefile, который будет компилировать каждый файл cpp в текущем каталоге в program. Это GNU делает конкретным. Обратите внимание, что на FreeBSD, make не GNU make! Вам нужно установить и запустить gmake.

CPPFLAGS := # flags for preprocessing: -D -I etc. 
CXXFLAGS := -Wall -pedantic -Wextra -Wformat=2 
LDFLAGS := # linker options, like -L/usr/local/boost/lib 
LDLIBS := # libraries to link to, e.g. -lboost_system 

SOURCES := $(wildcard *.cpp) 
OBJECTS := $(SOURCES:.cpp=.o) 

all: program # by convention, the first (default) target is called "all" 

program: $(OBJECTS) 
     $(LINK.o) $^ $(LDLIBS) -o [email protected] 

clean: 
     rm -f $(OBJECTS) program 

GNU make имеет встроенные правила для построения .o от .cpp; мы просто должны предоставить некоторые параметры этому правилу (CPPFLAGS, CXXFLAGS).

Он также знает, как сделать program из одного program.o. Это не полезно в нашем случае, потому что есть несколько файлов .o. Поэтому мы должны прямо сказать, что program зависит от объектных файлов и рецепт его создания.

Если у вас есть foo.cpp и bar.cpp в текущем каталоге, SOURCES будет иметь значение foo.cpp bar.cpp и OBJECTS будет foo.o bar.o. Когда вы вызываете make без явной цели, он пытается создать первую цель, которую видит (все). all зависит от program, поэтому make пытается построить program. Make видит, что program нуждается в foo.o и bar.o, но их не существует. К счастью, make видит, что есть foo.cpp, и он знает, как создать foo.o; то же самое с bar.o. После того, как он скомпилирует файлы C++ для создания объектных файлов, он может продолжить и связать их для получения program

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