我正在尝试编译一个库(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的一般用法。
答案 0 :(得分:1)
问题是您在../Make.sys
中定义的变量当前是处理include
的shell的本地变量; configure
和make
在子流程中运行,但没有发现您有任何偏好。正确的做法是添加:
export CFLAGS CC
在include
和对./configure
的调用之间。
您也可以将其放在Make.sys
内,或调用configure
作为CFLAGS=$CFLAGS CC=$CC ./configure
。您可能不应该直接在make
的调用中设置值;设置编译器意味着还需要不同的其他标志。