将来自Makefile的CC / CFLAGS / LDFLAGS传递给Tk / Tcl的./configure

时间:2013-04-21 18:26:39

标签: macos makefile tcl configure tk

我正在尝试编译一个库(xcrysden,基于Make文件),在编译期间执行./configure外部依赖项--Tk和Tcl 8.5 - 并编译它们。

所以,结构大致如下:

主Makefile:

...
cd external/src; make;

外部依赖(pre-)makefile(Tk):

include ../Make.sys
cd /unix
./configure
make
make install

外部makefile包含Make.sys:

...
CFLAGS =...
CC     =...

显然,配置会在/external/src/unix中生成另一个要由Tk使用的makefile。 在Tk文档中写道:

If you wish to specify a particular compiler, set the CC environment variable before calling configure. You can also specify CFLAGS prior to configure and they will be used during compilation.

但是从生成的Makefile中我肯定会看到既没有使用已定义的编译器(CC)也没有使用标志(CFLAGS)。当它在另一个make文件中设置时,它是否有资格作为“环境变量”?

我实际上在编译Tk时遇到了问题,因此我尝试不仅传递编译器而且传递链接信息 LDFLAGS = -L/opt/local/lib -lfontconfig。 我想以一种巧妙的方式(也就是说,仅修改依赖于Tk的库的Make.sys)。但后来我面临的问题是,我不仅知道如何将LDFLAGS传递给Tk配置,而且即使CC/CFLAGS也不存在。我不确定这是否特定于使用./configure的特定库(Tk),或者我误解了./configure的一般用法。

p / s /我正在使用gnu编译器在OS-X上进行编译。

1 个答案:

答案 0 :(得分:1)

问题是您在../Make.sys中定义的变量当前是处理include的shell的本地变量; configuremake在子流程中运行,但没有发现您有任何偏好。正确的做法是添加:

export CFLAGS CC

include和对./configure的调用之间。

您也可以将其放在Make.sys内,或调用configure作为CFLAGS=$CFLAGS CC=$CC ./configure。您可能不应该直接在make的调用中设置值;设置编译器意味着还需要不同的其他标志。