2016-01-20 35 views
0

我想許多編譯源文件彙編他們,但沒有將它們鏈接 我用一個makefile像下面gcc的錯誤:不能指定-c,並與多個文件

sources = $(wildcard absolut_path_to_source_files/*.c) 
objects = absolut_path_to_source_files_folder 
compile = $(foreach p,$(sources), gcc -c $(p) -o $(objects)/$(patsubst %.c,%.o,$(notdir $(p)))) 
all: 
    $(compile) 

我得到一個gcc -o錯誤的兩個標誌-c-o不能在同一時間對幾個源文件使用,

gcc: fatal error: cannot specify -o with -c, -S or -E with multiple files 
    compilation terminated. 

這是一件好事,因爲它是foreach功能,這對於調用gcc的內部使用的,我不明白一次只有一個源文件(迭代)。

回答

2

這是一個壞主意。基本上你的命令是無效的,因爲它就像gcc -c file1.c -o foo/file1.o gcc -c file2.c -o foo/file2.o - shell無法知道第一個命令什麼時候結束,第二個開始。如果你真的要,你可以添加;到每個生成的編譯命令的尾巴,所以他們至少隔開:

compile = $(foreach p,$(sources), gcc -c $(p) -o $(objects)/$(patsubst %.c,%.o,$(notdir $(p)));) 

但是,你應該做的是例如: -

BUILDDIR:=build 
sources:=$(wildcard *.c) 
objects:=$(addprefix $(BUILDDIR)/, $(patsubst %.c, %.o, $(sources))) 

$(BUILDDIR)/%.o: %.c 
    gcc -c $^ -o [email protected] 

all: $(objects)