2013-08-27 64 views
-2
target: $(patsubst %.c,%.o,$(wildcard ./src/*.c)) 
    @echo "making target" 
    $(cc) $(patsubst %.c,%.o,$(wildcard ./src/*.c)) $(LIBS) -o gif 
# $(cc) $(wildcard ./objects/*.o) $(LIBS) -o gif 

./objects/%.o: %.c 
    @echo "making objects now" 
    @mkdir -p ./objs 
    $(cc) $(CFLAGS) $(LDFLAGS) -c $< -o ./objects/[email protected] 

问题是对象.o文件是在src文件夹中创建的。 我想要在对象文件夹中创建对象。请帮忙?Makefile链接错误:undefined主

输出是

making target 
gcc ./src/gif_display.o ./src/gif_lzw.o ./src/gif_read.o ./src/sysm.o ./src/x86_main.o -lm -lc -o gif 
+0

我认为你需要打动你干净首先把它放在文件末尾 –

+0

不,这并不能解决问题。 –

+0

您可以发布“制定目标”的输出吗? – eyalm

回答

1

格式化的另一种方式,输出看起来是这样的:

[[email protected](none) GIF_Utility]$ make target 
echo "making target" 
making target 
gcc -lm -lc -o gif 
/usr/lib/gcc/i686-redhat-linux/4.6.3/../../../crt1.o: In function _start': (.text+0x18): undefined reference tomain' collect2: ld returned 1 exit status make: * [target] Error 1 
[[email protected](none) GIF_Utility]$ 

实际编译行是:

gcc -lm -lc -o gif 

正如你所看到的,有没有输入到编译器的输入文件,所以问题在于你的使用patsubst。如果你像这样的东西代替它,它会正确生成文件列表中选择所需:

$(patsubst %.c,%.o,$(wildcard ./src/*)) 
+0

谢谢!我试了一下。现在它得到以下问题。 .o是在源文件夹中创建的。 –

+0

请不要编辑你的问题 - 如果你有不同的问题,然后问一个新的问题,否则你让这个答案看起来不对,因为它不涉及你原来的问题 –

0

你需要修正你的patsubst更改目录:

$(patsubst ./src/%.c,./objs/%.o,$(wildcard ./src/*.c))