GNU создает несколько файлов одновременно - PullRequest
1 голос
/ 25 ноября 2011

Мне нужно использовать систему сборки GNU для компиляции множества файлов одновременно. До сих пор я видел только примеры того, как скомпилировать один файл одновременно. Это моя любимая ссылка:

http://www.scs.stanford.edu/~reddy/links/gnu/tutorial.pdf

Там написано:

«Makefile.am»

bin_PROGRAMS = hello

hello_SOURCES = hello.c

configure.ac '

AC_INIT([Hello Program],[1.0],

[Author Of The Program <aotp@zxcv.com>],

[hello])

AC_CONFIG_AUX_DIR(config)

AM_INIT_AUTOMAKE([dist-bzip2])

AC_PROG_CC

AC_PROG_INSTALL

AC_CONFIG_FILES([Makefile])

AC_OUTPUT

Но что мне делать, если я хочу сделать hello.c и hello2.c одновременно?

Ответы [ 3 ]

0 голосов
/ 25 ноября 2011

Даже если использовать automake, он генерирует только Makefile для вас. В итоге вы используете команду make.

Добавить параметр командной строки -j при запуске make. Он проинструктирует его запускать как можно больше команд сборки параллельно. Вы также можете указать максимальное количество одновременных сборок самостоятельно с помощью -j 4. (Обычное хорошее значение - nbrProcessors + 1)

0 голосов
/ 25 ноября 2011

Если вы хотите построить несколько целей по умолчанию в GNU make, вы генерируете «фальшивую» цель, виртуальную цель, которая зависит от обоих ваших результатов, например:

.PHONY: both
both: hello hello2
hello: hello.o
hello2: hello2.o
hello2.o: hello2.c

Это создаст обаhello и hello2, если вы запускаете make или make both.

Ссылка

Для automake вам просто нужно определить обе программы:

bin_PROGRAMS = hello hello2

hello_SOURCES = hello.c
hello2_SOURCES = hello2.c
0 голосов
/ 25 ноября 2011

Используйте make -j num для компиляции num файлов одновременно. Вы можете опустить num и позволить make скомпилировать как можно больше файлов одновременно. Обычно это не делает вещи быстрее, если вы компилируете больше файлов одновременно, чем у вас есть процессоры / ядра в вашей системе. Убедитесь, что все зависимости указаны перед использованием.

...