如何在 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 的编译时确定编译标志?的主要内容,如果未能解决你的问题,请参考以下文章
从命令行使用 clang 编译:兼容性问题 mac os X