2010-06-22 3 views
3

Я запускаю Windows 7 с gcc/g ++ под Cygwin. Каким будет формат Makefile (и расширение, я думаю, это .mk?) Для компиляции файлов .cpp (C++ source) и .h (header) в статическую библиотеку (DLL). Скажем, у меня есть переменная набор файлов:Makefile для компиляции ряда .cpp и .h в lib

  • file1.cpp
  • file1.h

  • file2.cpp

  • file2.h

  • file3.cpp

  • file3.h

  • ....

Что бы формат Makefile (и расширение) для компиляции их в статической библиотеке? (Я очень новичок в make-файлах). Какой был бы самый быстрый способ сделать это?

ответ

2

Расширение не было бы вообще, и файл называется Makefile, если вы хотите, чтобы GNU make автоматически находил его.

У Make есть автоматические переменные, которые дают вам контроль над большей частью процесса построения из файлов C/C++. Эти переменные включают CC, CPP, CFLAGS, CPPFLAGS, CXX, CXXFLAGS и LDFLAGS. Они будут управлять коммутаторами в препроцессоре C/C++, компиляторе и объекте платформы и программном компоновщике (программа, которая генерирует так называемый «исполняемый файл программы», или в режиме plainspeak «программа, которую вы компилируете»).

GNU make также включает множество неявных правил, которые предназначены для создания программ из исходного кода C/C++, поэтому вам не нужно писать их с нуля.

Например, даже без также файл, если вы попытаетесь make foobar, GNU Make попытается сначала построить foobar.o из foobar.c или foobar.cpp, если он находит либо путем вызова соответствующего компилятора, а затем будет пытаться построить foobar путем сборки (включая привязку) его частей от системных библиотек и foobar.o. Короче говоря, GNU Make знает, как построить программу foobar даже без присутствия make-файла - благодаря неявным правилам. Вы можете видеть эти правила, вызывая Make с помощью переключателя -p, например. make -p.

Некоторым людям нравится полагаться на GNU. Сделать неявную базу данных правил иметь скудные и короткие make-файлы, в которых указывается только конкретный для их проекта, в то время как некоторые люди могут зайти так далеко, чтобы отключить всю базу данных неявных правил (используя переключатель -r) и имеют полный контроль над процессом строительства, указав все с нуля. Я не буду комментировать законность любой из этих стратегий, но будьте уверены, оба они работают в некоторой степени.

2

Есть много вариантов, вы можете установить при создании библиотеки DLL, но вот основная команда, которую вы могли бы использовать, если вы делали это из командной строки:

gcc -shared -o mydll.dll file1.o file2.o file3.o 

А вот Makefile (как правило, называется Makefile), который будет обрабатывать весь процесс сборки:

# You will have to modify this line to list the actual files you use. 
# You could set it to use all the "fileN" files that you have, 
# but that's dangerous for a beginner. 
FILES = file1 file2 file3 

OBJECTS = $(addsuffix .o,$(FILES)) # This is "file1.o file2.o..." 

# This is the rule it uses to assemble file1.o, file2.o... into mydll.dll 
mydll.dll: $(OBJECTS) 
    gcc -shared $^ -o [email protected] # The whitespace at the beginning of this line is a TAB. 

# This is the rule it uses to compile fileN.cpp and fileN.h into fileN.o 
$(OBJECTS): %.o : %.cpp %.h 
    g++ -c $< -o [email protected]   # Again, a TAB at the beginning. 

Теперь построить mydll.dll, просто наберите «сделать».

Несколько нот. Если вы просто наберете «make», не указав make-файл или цель (вещь, которая будет создана), Make попытается использовать make-файл по умолчанию («GNUMakefile», «makefile» или «Makefile») и цель по умолчанию (первая один в make-файле, в данном случае mydll.dll).

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