2012-03-20 121 views
7

我正在學習C++。我想要一個makefile來編譯當前目錄下的所有cpp文件來分離可執行文件。 例如:Makefile將目錄中的所有cpp文件編譯爲單獨的可執行文件

在目錄下有3個C++文件,如examp1.cpp,examp2.cppexamp3.cpp。我想一個makefile,這將編譯和鏈接他們,給examp1.exe,examp2.exeexamp3.exe

我創建了一個bash腳本來編譯所有的人,並創建EXE文件,但我認爲,這不是確切的做法。

我有一個「.c」的Makefile,但這似乎並沒有在這裏工作。它只是創建目標文件而不是實際鏈接它。這是因爲如下:

SRCS=$(wildcard *.c) 
OBJS=(SRCS:.c=.o) 
all: $(OBJS) 

上面的代碼編譯所有新的和修改「.c」的文件,在當前目錄相同的名稱「的.o」文件。

我用來創建可執行文件的bash腳本如下:

for i in ./*.cpp 
do 
    g++ -Wno-deprecated $i -o `basename $i .cpp`".exe" 
done 

這意味着我要什麼「的.cpp」的文件,我把該目錄中,通過使用一個簡單的‘讓所有’或任何像它應該編譯。

+4

您是否嘗試過嘗試創建makefile?如果是這樣發佈,那麼我們可以幫助你。有[文檔](http://www.gnu.org/software/make/manual/make.html)可用於開始。 – Joe 2012-03-20 12:59:46

+1

製造商的版本因供應商而異。你在用什麼?你在Linux上使用GNU Make嗎?微軟在Windows/Visual C++上製作? – 2012-03-20 13:02:16

+1

您是否試過編寫一個makefile來編譯*一個源文件並生成一個可執行文件? – Beta 2012-03-20 13:57:00

回答

16

一個簡單的Makefile,你想要做會是什麼:

#Tell make to make one .out file for each .cpp file found in the current directory 
all: $(patsubst %.cpp, %.out, $(wildcard *.cpp)) 

#Rule how to create arbitary .out files. 
#First state what is needed for them e.g. additional headers, .cpp files in an include folder... 
#Then the command to create the .out file, probably you want to add further options to the g++ call. 
%.out: %.cpp Makefile 
    g++ $< -o [email protected] -std=c++0x 

你必須通過你使用並可能調整一些特定於平臺的設置,編譯器,以取代G ++,但Makefile文件本身應該工作。

+0

通過使用這個Makefile;例如,如果我有一個文件「hello.cpp」,我必須使用「打招呼。out「,但是我問我是否使用」make all「會將」hello.cpp「編譯爲」hello.out「。這裏當我使用上面的Makefile時,我得到」沒有任何事情要做「 – kaushik 2012-03-20 15:01:06

+0

你試過了嗎它在第二行指定make all命令需要一個.out文件中的每個在目錄中找到的.cpp文件。因此,調用make all會導致調用例如make hello.out,再見.out等等。當然你也可以使用make hello.out,因爲規則是指定的,但是你不需要。 – Haatschii 2012-03-20 15:03:28

+0

好吧,再試一次,我忘了把$(通配符* .cpp)放在所有的規則,現在它應該按預期工作 – Haatschii 2012-03-20 15:14:20

1

最簡單的Makefile文件,你可以創建一個可以爲你工作是這樣的:

all: examp1.exe examp2.exe examp3.exe 

將使用化妝的默認規則創建您的三個程序。

3

這是Makefile中,我用

CC = gcc 
CFLAGS = -g -O2 -std=gnu99 -static -Wall -Wextra -Isrc -rdynamic -fomit-frame-pointer 
all: $(patsubst %.c, %.out, $(wildcard *.c)) 
%.out: %.c Makefile 
    $(CC) $(CFLAGS) $< -o [email protected] -lm 
clean: 
    rm *.out      

你應該某處將其粘貼在你的家,只要你改變dirctory只是複製它。我使用別名在我的〜/ .basrc複製它

alias get_makefile_here='cp ~/Makefile ./' 

只需按下make然後砰一聲,你就大功告成了。還要注意一個事實,即一旦你完成了舊文件,它將不會重建它們的可執行文件。

相關問題