当前位置: 技术问答>linux和unix
对 linux C 编程 makefile书写的疑问(三)
来源: 互联网 发布时间:2016-11-07
本文导语: 下面是一个makefile: CC=gcc CFLAGS= -Iinclude -Wall -g -DDEBUG LDFLAGS=-L./lib -Wl,-rpath=./lib -Wl,-rpath=/usr/local/lib myapp: main.o test1.o test2.o test3.o test4.o test5.o $(CC) -o $@ $(LDFLAGS) $^ -ldl clean: rm -rf *.o myapp 几点疑问: 1.LDFLA...
下面是一个makefile:
CC=gcc
CFLAGS= -Iinclude -Wall -g -DDEBUG
LDFLAGS=-L./lib -Wl,-rpath=./lib -Wl,-rpath=/usr/local/lib
myapp: main.o test1.o test2.o test3.o test4.o test5.o
$(CC) -o $@ $(LDFLAGS) $^ -ldl
clean:
rm -rf *.o myapp
几点疑问:
1.LDFLAGS=-L./lib -Wl,-rpath=./lib -Wl,-rpath=/usr/local/lib
求高手帮解释一下 -Wl干什么用的?
2.$(CC) -o $@ $(LDFLAGS) $^ -ldl
$(LDFLAGS)是库文件的位置,-ldl是具体的库的名字, 对(LDFLAGS) 和 -ldl之间存在$^有些不解,不是不知$^是什么,知道$^是依赖目标,而是对$(LDFLAGS) $^ -ldl的排列顺序有些疑问,求解释一下makefile命令的具体命令规则顺序是怎样写的,举个例子:就是$(CC) -o $@ $(LDFLAGS) $^ -ldl
是按什么要求进行排列的?
求具体的排列顺序的方法。
初学linux,处处不懂。
以上两点希望有经验的人士帮解决一下!
CC=gcc
CFLAGS= -Iinclude -Wall -g -DDEBUG
LDFLAGS=-L./lib -Wl,-rpath=./lib -Wl,-rpath=/usr/local/lib
myapp: main.o test1.o test2.o test3.o test4.o test5.o
$(CC) -o $@ $(LDFLAGS) $^ -ldl
clean:
rm -rf *.o myapp
几点疑问:
1.LDFLAGS=-L./lib -Wl,-rpath=./lib -Wl,-rpath=/usr/local/lib
求高手帮解释一下 -Wl干什么用的?
2.$(CC) -o $@ $(LDFLAGS) $^ -ldl
$(LDFLAGS)是库文件的位置,-ldl是具体的库的名字, 对(LDFLAGS) 和 -ldl之间存在$^有些不解,不是不知$^是什么,知道$^是依赖目标,而是对$(LDFLAGS) $^ -ldl的排列顺序有些疑问,求解释一下makefile命令的具体命令规则顺序是怎样写的,举个例子:就是$(CC) -o $@ $(LDFLAGS) $^ -ldl
是按什么要求进行排列的?
求具体的排列顺序的方法。
初学linux,处处不懂。
以上两点希望有经验的人士帮解决一下!
|
有些书上说链接标志(LDFLAGS)要放到最后比较好。
最具体的只有去看官方的manual了。
最具体的只有去看官方的manual了。
|
google->gcc
|
通常是这样
gcc 1.c -o yourexe -L/LIB -ltest
或者gcc -o yourexe 1.c -L/LIB -ltest
gcc 1.c -o yourexe -L/LIB -ltest
或者gcc -o yourexe 1.c -L/LIB -ltest
|
man gcc