您的位置:首页 > 运维架构 > Linux

Makefile的变量$@ $^

2017-01-20 14:34 453 查看
想写个makfile结果总是失败。

下面是正确的写法:

LIB1_SRC := $(wildcard *.c)
LIB1_OBJ := $(LIB1_SRC:%.c=%.o)

CC = gcc
CFLAGS=
LDLIBRARY=
LIBRARY=

.PHONY: clean all

all: $(LIB1_OBJ)

$(LIB1_OBJ): $(LIB1_SRC)
$(CC) -o $@ -c $^
@echo $(LIB1_SRC)

@echo '$^' "=" $^

clean:
@rm -f *.o


注意,$@和$^的用法,之前看了网上别人的文章,照着写总是错:

$(CC) -o $@ $^


这样是不行的。将会有如下的提示:

#gcc -c lib1.c
gcc -o lib1.o lib1.c
/usr/lib/gcc/x86_64-redhat-linux/5.3.1/../../../../lib64/crt1.o:在函数‘_start’中:
(.text+0x20):对‘main’未定义的引用
collect2: 错误:ld 返回 1
Makefile:15: recipe for target 'lib1.o' failed
make: *** [lib1.o] Error 1


你知道让我犯的是什么吗?连着搜了好几个blog,大概都是同样差不多的内容,没有一个好用的,看来有些只是还是需要自己实际测试一下的。直接拿来的不好用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  makefile linux