如何在典型的gnu-make Linux应用程序构建中更改生成的Makefile中的变量?

时间:2017-11-08 20:58:37

标签: makefile gnu-make

我正在构建一个典型的Linux应用程序......

$ cd /path_to_source
$ ./configure --prefix=/usr/local
$ make
$ make install

配置步骤当然会生成一个Makefile。在我的情况下,SWIG_PL_INCLUDES变量在我的Makefile中,我修改它以设置正确的值。我,我这样做......

$ cd /path_to_source
$ ./configure --prefix=/usr/local
$ Update SWIG_PL_INCLUDES in generated Makefile
$ make
$ make install

我真的不喜欢那样。我猜我可以修改文件 BEFORE 我运行配置,因此Makefile是使用正确的SWIG_PL_INCLUDES值生成的。所以步骤现在......

$ cd /path_to_source
$ Update some file to have correct SWIG_PL_INCLUDES
$ ./configure --prefix=/usr/local
$ make
$ make install

想到的文件是Makefile.in,我确实在Makefile.in文件中看到以下行。但是,“@ SWIG_PL_INCLUDES @”是什么意思?如何使用它来做我想做的事?

SWIG_PL_INCLUDES = @SWIG_PL_INCLUDES@

2 个答案:

答案 0 :(得分:2)

1)除非你明确"覆盖"变量,你可以直接分配变量:

make SWIG_PL_INCLUDES='parameters go here'

GNU Make这个行为的文档在这里讨论: https://www.gnu.org/software/make/manual/html_node/Overriding.html

至于#34; @,"第二种用法可能是不必要的。文档表明其目的仅限于抑制make命令的回显。但是,我可能不知道其他功能。

https://www.gnu.org/software/make/manual/make.html#Echoing

编辑:有关GNU构建系统(Autotools)上下文中@ VARIABLE @语法的解释,请参阅MadScientist的评论。

答案 1 :(得分:1)

Makefile.in文件中定义的变量@XXX@旨在替换为configure脚本。基本上,configure将检查您的系统以查看它具有的功能以及它们的安装位置,然后它会将Makefile.in文件(您下载的源附带)转换为本地{{1} },使用基于Makefile发现的系统的值来替换上述表单中的字符串。

如果configure没有将您想要的值放入configure,那么通常您可以向Makefile提供选项,告诉它在哪里查找内容。

当然,这完全取决于您拥有的configure脚本以及创建它的人所具备的功能。您应该运行configure并仔细检查可用的选项,看看是否有一个可以让您告诉它使用configure --help的值的路径。