2013-03-19 108 views
0

現在繼續進行下去,我需要更改現有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 2013-03-19 08:57:52

+0

@Linuz:好的,你可以編輯你的問題,包括它,並解釋你有什麼問題嗎? – 2013-03-19 08:59:32

+0

更新的問題:) – San 2013-03-19 09:08:02

回答

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

謝謝Mohamed KALLEL! 幫助你的建議:) – San 2013-03-19 11:32:42

相關問題