包含3個檔案夾
目錄組織圖如下:
inc/hello.h
main/main.c, Makefile
src/hello.c
檔案內容如下:
hello.h:
void hello(char name[]);
main.c:
#include <stdio.h><br />#include "../inc/hello.h"<br />// The second hello.h should in ""<br />int main()<br />{<br /> hello("GCC");<br /> printf("Haha Linux Ubuntu!/n");<br /> return 0;<br />}
其中,第二個包含檔案,hello.h,必須要用"",如果用<>則gcc只會到系統目錄下去搜尋,不會到本目前的目錄下搜尋
就是""在使用者目錄下,<>在系統目錄下,這個在windows上不嚴格, 在linux裡似乎很嚴格
Makefile版本1:
# String declaration<br />objects = main.o hello.o</p><p># Command<br />app : $(objects)<br />cc -o app $(objects)<br />main.o : main.c hello.h<br />cc -c main.c<br />hello.o : hello.c stdio.h<br />cc -c ../src/hello.c</p><p># Search paths<br />vpath %.h /usr/include ../inc<br />vpath %.c ../src</p><p># Clean the intermediate files<br />.PHONY : clean<br />clean :<br />rm app $(objects)<br />
貌似vpath只對 %.o : 後面的有影響,下面的cc -c沒有作用
**************************
確實是這樣的,
%.o : %.c %.h,這句話是make的語句,而下面的
cc -c %.c,這句話是gcc的語句,
而vpath和VPATH設定的是make的搜尋路徑,對gcc的搜尋路徑沒有影響。
gcc設定搜尋路徑為:
cc -c main.c -Iinclude
**************************
Makefile版本2:
# String declaration<br />objects = main.o hello.o</p><p># Command<br />app : $(objects)<br />cc -o app $(objects)<br />main.o : main.c hello.h<br />cc -c main.c<br />hello.o : ../src/hello.c stdio.h<br />cc -c ../src/hello.c</p><p># Search paths<br />vpath %.h /usr/include ../inc<br />#vpath %.c ../src</p><p># Clean the intermediate files<br />.PHONY : clean<br />clean :<br />rm app $(objects)<br />
hello.c:
#include <stdio.h></p><p>void hello(char name[])<br />{<br />printf("Hello %s!/n", name);<br />}<br />