2011-05-22 57 views
1

我把我的代码组织成任意的目录结构。例如,我有一个包含源文件,头文件,其他目录的目录,每个目录包含其他源和头文件以及其他可能的目录等等。任意结构的Makefile设计

我想创建一个编译每个.c文件的GNU makefile .o文件,然后将所有.o文件合并到可执行文件中。

如果我使用bash要做到这一点,它会是这样的:

for c in `find . -type f -name \*.c`; do 
    gcc -c $c 
done 

find . -type f -name \*.o | xargs gcc -o main 

我可以做GNU类似的东西做什么呢?

回答

4

是的,绝对。你可以很容易地定义一个变量作为shell命令的结果;使用find命令定义一个SRC变量,并使您的目标可执行文件取决于SRC;即

SRC = $(shell find . -type f -name \*.c) 

executable: $(SRC:.c=.o) 
    gcc -o [email protected] $^ 
+0

如果不使用shell,GNU是不是支持这样的东西? – rid 2011-05-22 14:33:25

+0

我可能有一些特殊的通配符(双星号?),但我不记得我的头顶。壳形式适合我。 – 2011-05-22 16:04:35

+1

使通配符不是很灵活。这可能是你能做的最好的。 – Beta 2011-05-22 22:12:31