linux - 如何在 Makefile 中设置同时适用于 Windows 和 Linux 平台的 CC 和 AR?

标签 linux windows makefile cross-platform gnu-make

我的团队成员使用 Windows 构建环境,并且 Makefile 具有:

CC := $(ANDROID_NDK_HOME)/toolchains/aarch64-linux-android-4.9/prebuilt/windows-x86_64/bin/aarch64-linux-android-gcc.exe
AR := $(ANDROID_NDK_HOME)/toolchains/aarch64-linux-android-4.9/prebuilt/windows-x86_64/bin/aarch64-linux-android-ar.exe

其中 ANDROID_NDK_HOME 是用户必须设置的环境变量。

我想在我的 Ubuntu 安装上使用相同的 Makefile,但想更改 Makefile,以便我们都可以使用相同的 Makefile。那可能吗?在此期间,我做了以下有效的更改。

CC := $(ANDROID_NDK_HOME)/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-gcc
AR := $(ANDROID_NDK_HOME)/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar

基本上,更改是将“windows-x86”更改为 linux-x86,并删除了二进制文件本身名称中的 .exe。

任何提示/指示表示赞赏。谢谢。

最佳答案

您可以在某些特定于操作系统的环境变量上进行分支。例如:COMSPEC 在 Windows 上始终设置为非空值,可能在其他平台上未定义。

ifneq ($(COMSPEC),)
  # Windows
  CC := $(ANDROID_NDK_HOME)/toolchains/aarch64-linux-android-4.9/prebuilt/windows-x86_64/bin/aarch64-linux-android-gcc.exe
  AR := $(ANDROID_NDK_HOME)/toolchains/aarch64-linux-android-4.9/prebuilt/windows-x86_64/bin/aarch64-linux-android-ar.exe
else
  # Not Windows
  CC := $(ANDROID_NDK_HOME)/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-gcc
  AR := $(ANDROID_NDK_HOME)/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar
endif

关于linux - 如何在 Makefile 中设置同时适用于 Windows 和 Linux 平台的 CC 和 AR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41927133/

相关文章:

linux - Linux 上的 eclipse-ee : Refusing to initialize GTK+

android - CM7 for Milestone - 在 kernel.org 停机维护时从源代码构建

linux - 动态加载时的库路径?

IO 实用程序 writel 和 readl 可以用于物理地址吗

c# - 以独立于语言的方式检索性能计数器值

windows - 如何在 cmake 中使用 add_test 传递 ${CTEST_CONFIGURATION_TYPE}

c - 减少 Makefile 冗余

c++ - Winsock 速率限制

c - 为什么我收到错误 "undefined reference to ` pow' collect2 : error: ld returned 1 exit status make: *** [p1] Error 1"?

c++ - 使用 CMake 制作跨平台库?