如何在 OS/X 的编译时确定编译标志?

Posted

技术标签:

【中文标题】如何在 OS/X 的编译时确定编译标志?【英文标题】:How to determine compilation flags at compile time on OS/X? 【发布时间】:2011-03-31 23:12:31 【问题描述】:

如果我在带有 gcc 4.1 的 x86 Linux 上使用 -fPIC 进行编译,则定义 __PIC__ 设置为 1 并且预处理器可以在编译时对其进行操作。但是,在 gcc 4.01 下的 OS/X 上,情况并非如此。是否有其他方法可以在 OS/X 的编译时确定 -fPIC 的设置?

在 OS/X 下在预处理器级别查询编译标志的通用工具会更有帮助,但我找不到类似的东西。

【问题讨论】:

【参考方案1】:

-fPIC 是 OS X 上的默认设置。在我那笨拙的旧 OS X 10.4 机器上的 gcc 4.0.1 确实定义了__PIC__;或者,当它被 -fno-PIC 明确关闭时,它不会。

编译标志的设置通常不会导出到预处理器,除非某些特殊情况可能因不同的 GCC 目标而异。

但是您可以在任何平台上使用gcc-dM 选项看到更改标志对预定义预处理器定义的影响,该选项在预处理完成后转储预处理器定义。

例如从终端窗口:

$ gcc -xc++ -dM -E /dev/null | sort > /tmp/defaults.txt
$ gcc -fno-PIC -xc++ -dM -E /dev/null | sort > /tmp/nopic.txt
$ diff /tmp/defaults.txt /tmp/nopic.txt
65d64
< #define __PIC__ 1
$ 

(我在那里指定了-xc++,因为我正在预处理/dev/null,而不是带有指示语言变体的扩展名的文件。也可以是-xc-xobjective-c-xobjective-c++。)

【讨论】:

谢谢,这是非常有用的信息。我应该提到我正在构建一个 .S 文件,事实证明 -fPIC 在将 gcc 作为预处理器运行或组装时显然不是默认值。为了使事情进一步复杂化,我在汇编器的命令行上使用了 -fPIC,但预处理器没有。

以上是关于如何在 OS/X 的编译时确定编译标志?的主要内容,如果未能解决你的问题,请参考以下文章

如何在os x下让sublime text编译c程序

从命令行使用 clang 编译:兼容性问题 mac os X

使用 pyximport 时如何设置 Cython 编译器标志?

如何确定给定编译标志的 GCC 的最小/最大版本?

链接程序时是不是需要重复编译标志?

在 Xcode 中添加链接器标志