2013-07-24 8 views
0

У меня есть папка под названием UnitTest. У меня есть несколько файлов .c. Все файлы содержат функцию 'main'.сделать файл несколькими исполняемыми файлами

Используя make-файл, я хочу скомпилировать все файлы .c из этой папки. Но эти файлы зависят от других файлов C, находящихся в другой папке.

Как написать файл для этого?

например. Common \ *. C - сгенерировать объектный файл App \ *. C - сгенерировать файл объекта. - относится к . файлам общего каталога UnitTest \ .c - эти файлы должны быть скомпилированы как исполняемые файлы. Обратитесь к * .o из каталога App и Common.

Update: файлы заголовков находятся в отдельной папке с именем \ Include

Мне нужен один Makefile для этого. Пожалуйста помоги.

+0

Вы используете заголовочные файлы? Где они? – Beta

+0

@Beta, Заголовочные файлы находятся в отдельном каталоге с именем \ Include – SHRI

+0

И для каждого файла в 'UnitTest /', знаете ли вы, какие файлы в 'Common /' и 'Apps /' ему нужны? – Beta

ответ

2

В соответствии со стандартами каждый каталог будет содержать один файл Makefile. Таким образом, вы можете иметь три Makefiles для этой работы, если у вас есть три каталога.

(d) common 
| 
|---(f) common.h 
|---(f) common.c 
|---(f) Makefile --- MAkefile for the common folder. 

(d) app 
| 
|---(f) app.h 
|---(f) app.c 
|---(f) Makefile 

(d) unittest 
| 
|---(f) unittest.h 
|---(f) unittest.c 
|---(f) Makefile 

(f) Makefile --- invoke all makefiles in the mentioned order. 

Если вы хотите, чтобы один Makefile произошел, все это сделано, вы также можете сделать это. Здесь вы должны скомпилировать файлы, указав пути файлов. порядок наиболее бессилен.

1

Это сложно, поэтому мы будем принимать его поэтапно. Во-первых, строительство объектные файлы:

CFLAGS += -I/include 

vpath %.h /include 

Это должно быть достаточно, чтобы построить любой объектный файл в Common/, Apps/ или UnitTest/. Проверьте это, прежде чем идти дальше.

Теперь, чтобы построить все объекты в Common/:

COMMONSOURCES := $(wildcard Common/*.c) 
COMMONOBJECTS := $(COMMONSOURCES:.c=.o) 

all: $(COMMONOBJECTS) 

тест это прежде, чем идти дальше.

Измените правило all и введите правило для общей библиотеки. (Мы будем использовать статическую библиотеку сейчас, так как это немного проще.)

Common/libCommon.a: $(COMMONOBJECTS) 
    ar -cvq [email protected] $^ 

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

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