我正在构建一个典型的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@
答案 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
的值的路径。