< myhello.c >:
#include
#include "test.h"
#include "abc.h"
void print(void);
int main()
void print(void)
< abc.c >:
#include "abc.h"
void abc(void)
< abc.h >:
#include
void abc(void);
< test.c >:
#include
void printtest(void)
< test.h >:
#include
void printtest(void);
簡單來說,在myhello.c的main中,需要呼叫./abc.c的abc函式和./test.c的printtest函式,因而包含了他們的標頭檔案abc.h test.h
重點來了,makefile可以怎麼寫(只是我的寫法的參考)
#目標(要生成的檔名)
target := myhello
#編譯器的選擇(在linux中其實可以忽略,因為cc指向的本來就是gcc)
cc := gcc
#編譯的引數
cflag := -wall
#編譯包含的標頭檔案所在目錄
includes := -i. -iinclude/
srcs = myhello.c ./common/abc.c test.c
#把原始檔srcs字串的字尾.c改為.o
objs = $(srcs:.c=.o)
#匹配所有的偽目標依賴,即執行目標myhello.o & ./common/abc.c & ./common/test/test.c
.phony:all
#all為偽目標
all:$(objs)
#當所有依賴目標都存在後,鏈結,即鏈結myhello.o & ./common/abc.c & ./commontest/test.c
$(cc) $(ldflag) -o $(target) $^
#重定義隱藏規則,匹配上述目標:myhello.o & ./common/abc.c & ./common/test/test.c
%.o:%.c
#生成.o檔案,注意,由於srcs有個別包含詳細位址的,生成的.o檔案也是詳細位址
$(cc) -c $(includes) $(cflag) $(cppflag) $< -o $@
//清空除原始檔外的所有生成檔案
clean:
rm -rf $(basename $(target)) $(srcs:.c=.o)
結論:
在gcc時,會自動解決標頭檔案.h的依賴關係,只需要指明標頭檔案的位址
在gcc鏈結時,才需要把所有的原始檔.o列出了,否則出現引用了未定義的變數/函式
Linux 下Fortran多檔案編譯
或者ifort o exe name main.f90 fun.f90 方法二 在主程式main.f90 中加入include fun.f90 語句,然後在linux下用fortran命令編譯,命令如下 ifort o exe name main.f90 方法三 分步驟編譯,命令如下 ifort c...
Linux下Fortran多檔案編譯
或者ifort o exe name main.f90 fun.f90 方法二 在主程式main.f90中加入include fun.f90 語句,然後在linux下用fortran命令編譯,命令如下 ifort o exe name main.f90 方法三 分步驟編譯,命令如下 ifort c ...
Linux下C多檔案編譯Makefile
第一 makefile檔案編寫 1.第乙個字母大寫,其餘的都是小寫。2.makefile關係到了整個工程的編譯。3.可以執行作業系統的命令。4.其實makefile的本質是定義了檔案之間的依賴性問題。5.第乙個字母大寫,其餘的都是小寫。make命令執行時,需要乙個 makefile 檔案,以告訴ma...