C++ 是什么导致编译库在内部存储其build命令?

C++ 是什么导致编译库在内部存储其build命令?,c++,c,gcc,shared-libraries,static-libraries,C++,C,Gcc,Shared Libraries,Static Libraries,有时,当我从源代码构建包时,生成的二进制文件似乎包含对我正在使用的构建标志的引用 我正在使用的示例是fftw库。下面是如何下载和构建它 FWIW,执行这些行大约需要30秒,所以请尝试一下 cd/tmp wgethttp://www.fftw.org/fftw-3.3.4.tar.gz tar xf fftw-3.3.4.tar.gz cd fftw-3.3.4 CFLAGS=“-I/foo/bar”。/configure--prefix=/tmp#我们不会运行“make install”, #所

有时,当我从源代码构建包时,生成的二进制文件似乎包含对我正在使用的构建标志的引用

我正在使用的示例是fftw库。下面是如何下载和构建它

FWIW,执行这些行大约需要30秒,所以请尝试一下

cd/tmp
wgethttp://www.fftw.org/fftw-3.3.4.tar.gz
tar xf fftw-3.3.4.tar.gz
cd fftw-3.3.4
CFLAGS=“-I/foo/bar”。/configure--prefix=/tmp#我们不会运行“make install”,
#所以前缀并不重要。
make-j4
现在让我们检查编译后的输出。请注意,愚蠢的
-I/foo/bar
标志以二进制文件本身结束

$strings.libs/libfftw3.a | grep gcc
gcc-I/foo/bar
由于这里不值得一提的技术原因(与包管理工具相关),我想阻止这种情况发生,或者至少理解它发生的原因,以及它是否重要


顺便说一句:对于共享库和静态库,Linux和OS X上似乎都会发生这种情况。

事实证明这是特定于
fftw
。感谢@n.m.帮我看到这一点

fftw源有一条如下所示的线。(此处进行简化。)

//api/version.c
常量字符fftwf_cc[]=FFTW_cc;
通过其configure/make脚本,fftw使用了类似于下面的build命令的东西(这里再次进行了大幅简化)

gcc-I/foo/bar-DFFTW_CC=''gcc-I/foo/bar'-capi/version.c

。。。因此,难怪它最终被编译到库中。

不可复制。请提供一个@n.m.好的,我已经编辑到问题,以提供一个真实世界的示例(fftw)。您可以在自己的计算机上复制并粘贴这些命令,运行这些命令只需30秒。请研究生成的
Makefile
-s
fgrep'gcc-I/foo/bar'config.h
@n.m.谢谢!看起来
FFTW\u CC
是通过
api/version.c
内置到二进制文件中的。我原以为autotools或make是开箱即用的。但fftw的作者们似乎是自己将这一点写入了图书馆。