【问题标题】:makefile with OS dependent compiler带有操作系统相关编译器的 makefile
【发布时间】:2014-08-25 03:14:33
【问题描述】:

我有一组通常使用 gcc 在 makefile 中编译的 C 程序,但 OSX Mavericks 现在使用 clang。在makefile中测试现有编译器并使用适当的编译器的好方法是什么?此外,我还想使用与架构相关的优化标志(例如,对于 Linux 上的 gcc,我会使用 -O3,但在 OSX 上我会使用 -fast;对于 OSX 上的 clang,我会使用 -Ofast)。

非常感谢,

瑞恩

【问题讨论】:

  • make 变量 CXX 是适当的 C++ 编译器,CC 是 C 编译器。有关此类变量的列表,请参阅info make Implicit Implicit

标签: c macos compiler-construction makefile osx-mavericks


【解决方案1】:

如果您是在 MacOS X 和 Linux 上编译,那么您可以将以下内容放入您的 makefile:

UNAME := $(shell uname)

ifeq ($(UNAME), Darwin)
CFLAGS = -Ofast
endif

ifeq ($(UNAME), Linux)
CFLAGS = -O3
endif

# etc

【讨论】:

  • 我认为CFLAGS += ... 可能会更好。
  • 这很有帮助!我想我缺少的是如何测试编译器。我想做一些类似于 cmake 中这篇文章中所做的事情:stackoverflow.com/questions/10046114/…。也就是说,make 是否有与 CMAKE_CC_COMPILER_ID 类似的变量?我似乎找不到一个。谢谢!
  • 你可以自己定义编译器来使用。或者您可以在 OSX 和 Linux 上使用 clang。
  • 好的,谢谢。这对我来说很容易做到,但是对于分布相当广泛的软件,我希望 make 文件能够在 Linux 和 OSX 上编译,而无需用户更新 makefile。当 gcc 基本上是通用的时,这很容易。但是当 OSX Mavericks 改用 clang 时,情况发生了变化。许多 Linux 系统(尤其是较旧的发行版)似乎没有安装 clang。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 2014-06-25
  • 2019-05-10
  • 2011-10-31
  • 2023-04-07
  • 2014-08-14
  • 2023-03-18
相关资源
最近更新 更多