一个简单的问题。我在示例Makefile中找到了“DLDFLAGS”和“LDFLAGS”。使用的编译器是gcc。看起来它们都用于连接器。我想知道它们之间的区别是什么。
答案 0 :(得分:8)
LDFLAGS
通常设置为包含传递给链接器的选项(因此可能包含必需的库)。与CFLAGS
一起,这些通常被设置为开发人员环境变量的一部分,make
将了解它们,因此将主动查看它们是否已设置并将它们传递给编译器。
例如,如果我在我的环境中将CFLAGS
设置为-O2 -Wall
,那么如果我键入make hello
而没有Makefile,make会自动将编译器调用为gcc -O2 -Wall hello.c -o hello.o
。然后它将以类似的方式调用链接器,将LDFLAGS
中的标志添加到命令行。
Makefile可以明确覆盖LDFLAGS
和CFLAGS
。
DLDFLAGS
不是一个众所周知的/已定义的变量,因此它可能特定于该特定的Makefile。您必须阅读Makefile以了解它是如何使用的。例如,它可以定义在设置LDFLAGS
时使用的链接器标志 - 读取Makefile以确定。
答案 1 :(得分:0)
DLDFLAGS
只是一个预编译器标志,它定义了名为“LDFLAGS”的宏吗?
来自gcc手册:
-D name
Predefine name as a macro, with definition 1