多文件編譯makefile
⑴ 多文件C程序怎麼編譯連接及運行
關於 C 語言源程序的多模塊編譯、連接,這個必須要靠編寫 makefile 文件才行。
而且還必須依照編寫 makefile 的規則編寫,才能夠正確編譯、連接各個 C 語言
源程序,最終執行 make makefile 指令,生成一個可執行程序。
makefile 文件是一個文本文件,其大致內容如下:
myfile1.o: myfile1.c
gcc -c myfile1.c
myfile2.o: myfile2.c
gcc -c myfile2.c
myrunfile: myfile1.o myfile2.o
gcc -o myrunfile myfile1.o myfile2.o
⑵ 如何用makefile編譯多個c文件
假設有下面幾個c++文件:
wherewhen.h wherewhen.c
countdown.h countdown.c 包含了math.h, 需要連接庫文件
main.c 主函數, main.c 包含了兩個頭文件 wherewhen.h and countdown.h
1、第一種編譯方法:
g++ -Wall -g wherewhen.c countdown.c main.c -lm -o myprogram
生成可執行文件myprogram
2、第二中編譯方法, 分別編譯各個文件:
g++ -Wall -g -c wherewhen.c
g++ -Wall -g -c countdown.c
g++ -Wall -g -c main.c
g++ -g wherewhen.o countdown.o main.o -lm -o myprogram
⑶ c多個文件如何編譯
關於整個 C 語言中的主函數 main( ) 如何調用相關的頭文件(*.h)、以及調用其它獨立的模塊(*.c)的方法,關鍵在於對於如何編寫 makefile 文件的真正理解、以及真正掌握編寫規則。
由於我已經有很多年沒有編寫過 C 語言源程序、以及編寫 makefile 文件了,但是可以大概給你提供一個思路就是:
下面的文本文件假設以 my_makefile 為例,編譯環境為 linux 系統,C 語言編譯器為 gcc。
但是在這里注意一點:我的 my_makefile 文件中的注釋語句是否是分號進行注釋,我已經不太記得了,這個需要自己再參考一下。
另外就是:對源文件(*.c)、以及生成可執行文件(my_runfile)在 my_makefile 文件中的前後次序,我也記不清了,僅供參考。
myprog1.o: myprog1.c ; myprog1.o 的生成依賴於 myprog1.c 這個源程序
gcc -c myprog1.c ; 使用 Linux 系統的 C 語言編譯器對 myprog1.c 只編譯、不鏈接
myprog2.o: myprog2.c ; myprog2.o 的生成依賴於 myprog2.c 這個源程序
gcc -c myprog2.c ;使用 Linux 系統的 C 語言編譯器對 myprog2.c 只編譯、不鏈接
my_runfile: myprog1.o myprog2.o ; 可執行文件 my_runfile 的生成依賴於 myprog1.o、myprog2.o 這兩個目標文件
gcc -o my_runfile myprog1.o myprog2.o ; 使用 cc 的 -o 選項生成用戶自定義的可執行文件:my_runfile,如果不指定 -o 選項,cc 編譯器生成的預設可執行文件名為:a.out
運行命令為:
$make -f my_makefile (使用 -f 選項代替預設的 make 文件名 makefile)
⑷ 需要一個編譯多個c文件的makefile
#$Id:Makefile,v2.02008/10/0818:55:40Update$
prog_name=TEST#目標文件名
######################################
#
#Genericmakefile
#
#byJackieXie
#email:[email protected]
#
#Copyright(c)2008JackieXie
#Allrightsreserved.
#
#Nowarranty,noliability;
#youusethisatyourownrisk.
#
#Youarefreetomodifyand
#distributethiswithoutgiving
#credittotheoriginalauthor.
#
######################################
###Customising
#
#Adjustthefollowingifnecessary;EXECUTABLEisthetarget
#executable"sfilename,
#(e.g.alleg,stdcx,iostr,etc).Youcanoverridetheseonmake"s
#commandlineofcourse,ifyouprefertodoitthatway.
#
EXECUTABLE:=$(prog_name)
LIBS:=#庫文件沒有可不寫
#Nowalteranyimplicitrules"variablesifyoulike,e.g.:
#
CFLAGS:=-g-Wall-O
CXXFLAGS:=$(CFLAGS)
CC:=gcc#編譯器
#
#directory;ifnotitusesdelinstead,butthiscancause(harmless)
#`Filenotfound"errormessages.IfyouarenotusingDOSatall,
#
#files.
#
ifneq($(wildcard$(DJDIR)/bin/rm),)
RM-F:=rm-f
else
RM-F:=del
endif
#Youshouldn".
#
#...................
SOURCE:=$(wildcard*.cpp)$(wildcard*.c)
OBJS:=$(patsubst%.cpp,%.o,$(patsubst%.c,%.o,$(SOURCE)))
DEPS:=$(patsubst%.o,%.d,$(OBJS))
MISSING_DEPS:=$(filter-out$(wildcard$(DEPS)),$(DEPS))
MISSING_DEPS_SOURCES:=$(wildcard$(patsubst%.d,%.cpp,$(MISSING_DEPS))$(patsubst%.d,%.cpp,$(MISSING_DEPS)))
CPPFLAGS+=-MD
.PHONY:
everything:$(EXECUTABLE)
deps:$(DEPS)
objs:$(OBJS)
clean:
@$(RM-F)*.o
@$(RM-F)*.d
veryclean:clean
@$(RM-F)$(EXECUTABLE)
@$(RM-F)*.*~*~
distclean:veryclean
rebuild:verycleaneverything
ifneq($(MISSING_DEPS),)
$(MISSING_DEPS):
@$(RM-F)$(patsubst%.d,%.o,$@)
endif
-include$(DEPS)
$(EXECUTABLE):$(OBJS)
$(CC)-o$(EXECUTABLE)$(OBJS)$(addprefix,$(LIBS))
復制,保存為makefile 文件即可。
⑸ makefile文件怎麼能將位於不同目錄下 的文件一起編譯
test.h不存在是因為你沒有給指定test.h的路徑,因為沒有指定的話頭文件搜索會以這個順序
1,當前目錄
2,系統目錄
所以 你現在有兩個辦法
1,在包含頭文件的時候 以當前目錄開始
也就是說你需要把這里#include "test.h" 改成#include "./math/test.h"
2,在makefile中用 -I來指定搜索目錄
比如makefile中這樣寫 gcc -I ./math ......其他亂七八糟參數
⑹ 大家來幫我看看怎樣寫一個這樣的Makefile文件,通過Makefile文件編譯這個多文件的c語言程序
以下是一個最簡單的多文件+makefile的形式
編譯採用gcc 你可以修改成你的編譯器
三個文件 main.c func.c makefile
main.c
#include<stdio.h>
externvoidfunc();//這個應該放在頭文件中的比如func.h簡單起見就直接聲明了
intmain()
{
func();
}
func.c
#include<stdio.h>
voidfunc()
{
printf("helloworld ");
}
makefile
.PHONY:allmain.ofunc.o
all:main.ofunc.o
@gccmain.ofunc.o-oout
main.o:main.c
@gcc-cmain.c-omain.o
func.o:func.c
@gcc-cfunc.c-ofunc.o
所有的都是最簡單的
⑺ linux下的一個c語言程序代碼寫在4個源文件中,編寫一個makefile用於程序編譯
摘要 CC = gcc
⑻ 用makefile編輯的文件怎麼編譯
我們在linux下進行編程的時候,會發現我們沒有工程文件,然後,我們在不同目錄下
的文件如此雜亂無章,讓我們感到頭疼,怎麼可以把它們進行同步在一起,然後,一起進行編譯呢,
這里,就是我們需要用到的工具了,makefile文件的作用了,makefile可以有效地組織文件和目錄,
把處於不同目錄下的文件進行同時編譯,而不會因為目錄的不同,而有所差別。
這里,我來分享一下makefile的簡單的用法。
1:基本的格式:
magproc:magproc.o dbproc.o
$(EC) -o $(BINPATH)/$@ $? $(LIB)
可執行文件名:鏈接文件
編譯工具 (參數) (鏈接庫) 文件名
2:工程文件Make.defines
3:makefile文件
http://jingyan..com/article/48206aeaf9e82e216ad6b335.html
⑼ 用一個makefile編譯出多個文件
使用 .PHONY, 使用方法見下面描述或參考鏈接. 經過測試可行.
---------
phony 目標可以有依賴關系。當一個目錄中有多個程序,將其放在一個makefile 中會更方便。因為預設目標是makefile 中的第一個目標,通常將這個phony 目標叫做"all",其依賴文件為各個程序:
all : prog1 prog2 prog3
.PHONY : all
prog1 : prog1.o utils.o
cc -o prog1 prog1.o utils.o
prog2 : prog2.o
cc -o prog2 prog2.o
prog3 : prog3.o sort.o utils.o
cc -o prog3 prog3.o sort.o utils.o
這樣,使用"make"將可以將三個程序都生成了。d
當一個phony 目標是另一個的依賴,其作用相當於子程序,例如:
.PHONY: cleanall cleanobj cleandiff
cleanall : cleanobj cleandiff
rm program
cleanobj :
rm *.o
cleandiff :
rm *.diff
----------
我測試的Makefile:
OBJS=main.o sub.o
all : test sam
.PHONY:all
test : $(OBJS)
gcc -o test $(OBJS)
sam : sam.o
gcc -o sam sam.o
main.o : main.c sub.h
gcc -c main.c
sub.o : sub.c sub.h
gcc -c sub.c
sam.o : sam.c
gcc -c sam.c
⑽ 我想知道makefile文件怎麼用,我下了一個程序項目,里邊有很多程序,有一個makefile文件,怎麼編譯它
如果是m(M)kefile命名,直接make即可。
否則make -f (其他名)編譯。
試試。
