2012-03-20 59 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然后砰一声,你就大功告成了。还要注意一个事实,即一旦你完成了旧文件,它将不会重建它们的可执行文件。

相关问题