2013-03-19 6 views
0

Теперь, чтобы продолжить, мне нужно изменить представление существующего Makefile.Как написать makefile для создания объектных файлов и исполняемых файлов в разных каталогах?

В настоящее время я использую:

~/Linuz/src: 1.c, 2.c, 3.c ... 

~/Linuz/inc: abc.h, xyz.h 

и Makefile в: ~/Linuz/some_other_dir/

Но нужно изменить структуру.

  1. Хочет создать библиотеку из (~/Linuz/src/ и ~/linuz/inc)
  2. библиотеки будет использоваться для получения исполняемого файла. Исходные файлы приложений (файлы .c) находятся в ~/Linuz/app/
  3. ~/Linuz/bin/ должно быть создано во время компиляции для хранения всех объектных файлов и исполняемого файла.

Любые предложения?

Моя Makefile выглядит следующим образом:

all: Library.a 

%.o: ../src/%.c 

    $(CC) $(CFLAGS) -I../inc/ -c -o [email protected] $^ 

Library.a: $(SRC_DIR)/1.c $(SRC_DIR)/2.c $(SRC_DIR)/3.c $(SRC_DIR)/4.c $(SRC_DIR)/5.c 

    $(CC) $(LDFLAGS) -o [email protected] $^ 

all: prog 

%.o: ./*.c 

    $(CC) $(CFLAGS) -ILibrary.a -c -o [email protected] $^ 


prog: $(APP_DIR)/app1.c $(APP_DIR)/app2.c $(APP_DIR)/app3.c 

clean: 
    rm -f *.o my_program 
+1

@linuz положите его на свой вопрос – MOHAMED

+0

@Linuz: Хорошо, можете ли вы отредактировать свой вопрос, включив его, а также объяснение, какие у вас были проблемы? –

+0

Обновленный вопрос :) – San

ответ

2

Пусть Предположим, что ваша архитектура код выглядит следующим образом:

└── linuz 
    ├── app 
    │   ├── app1.c 
    │   ├── app2.c 
    │   └── app3.c 
    ├── bin 
    ├── inc 
    │   └── any.h 
    ├── some_other_dir 
    │   └── Makefile 
    └── src 
     ├── 1.c 
     ├── 2.c 
     └── 3.c 

Так что ваш Makefile может быть:

all: ../bin/libmy_lib.a ../bin/my_program 


../bin/my_lib_%.o: ../src/%.c 
    $(CC) $(CFLAGS) -I../inc -c -o [email protected] $^ 

../bin/libmy_lib.a: ../bin/my_lib_1.o ../bin/my_lib_2.o ../bin/my_lib_3.o 
    ar rcs [email protected] $^ 

../bin/my_app_%.o: ../app/%.c 
    $(CC) $(CFLAGS) -I../inc -c -o [email protected] $^ 

../bin/my_program: ../bin/my_app_app1.o ../bin/my_app_app2.o ../bin/my_app_app3.o ../bin/libmy_lib.a 
    $(CC) $(LDFLAGS) -L../bin/ -lmy_lib -o [email protected] $^ 


clean: 
    rm -f ../bin/*.o ../bin/libmy_lib.a ../bin/my_program 

Для объясните, обратитесь к вашему previous question

+0

Спасибо, Мохамед КАЛЕЛЬ! помог вашим предложениям :) – San

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