如何在 GNU Make 的定义中使用 ifeq?

2024-04-22

我正在尝试在 Makefile 中的定义内执行 ifeq,但我似乎遇到了一些错误,并且我想知道是否遗漏了某些内容。我有以下 Makefile:

$(info ---- start ----)
ifeq ("X","Y")
$(info DOES not appear_1)
endif

define TESTDEF
ifeq ("X","Y")
$(info SHOULD not appear)
# $(error DEFINITELY SHOULD not error...)
endif
endef

$(eval $(call TESTDEF, 1,2,3))

我收到以下错误:

---- start ----
SHOULD not appear
Makefile:14: *** DEFINITELY SHOULD not error....  Stop.

我缺少什么技巧吗?是否可以在ifeq的内部定义? (注意:这发生在我的本机 GNU 3.81 make 和我的 mips uclibc 交叉编译器上)


当你call在此函数中,Make 使用您提供的任何参数(在本例中不相关)评估定义。所以如果定义包含类似的东西$(info ...) or $(error ...), 即使在评论中,Make 将对其进行评估,您将看到结果(请参阅文档 https://www.gnu.org/software/make/manual/html_node/Makefile-Contents.html;我已经在 GNUMake 3.81 中对其进行了测试)。

要获得您想要的行为,请添加几个美元符号:

define TESTDEF
ifeq ("X","Y")
$$(info SHALL not appear)
# $$(info DEFINITELY SHALL not error...)
endif
endef

$(eval $(call TESTDEF))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 GNU Make 的定义中使用 ifeq? 的相关文章

  • 获取 Android NDK 的 C 预处理器的架构类型 (ABI)

    我正在尝试根据所选的 ABI 库控制 Android NDK 项目中的 C 代码 首先 我希望 NDK 库方法用字符串回答所使用的 ABI 我做了几次尝试 但都未能提供结果 在Application mk中我定义APP ABI 全部 And
  • GNU make - 强制 PHONY 目标的依赖顺序

    我有一个如下的 Makefile 我关心的是依赖顺序up clean PHONY up up down docker compose up d PHONY up clean up clean down clean up PHONY down
  • MinGW C 编译器“无法编译简单的测试程序”

    我想将 MinGW 作为 C 编译器运行 MinGW 已从 Chocolatey 安装 调用是通过 CMake 从 gitlab runner 进行的 这失败了 cmake G MinGW Makefiles DCMAKE C COMPIL
  • 这些 g++“多重定义”错误是怎么回事?

    我正处于一个项目的早期阶段 请阅读 昨天刚刚开始 我正在设置我的初始 makefile 这非常简单 以下是该文件的完整内容 all main o resource o g o output exe main o resource o mai
  • 创建一个简单的 Makefile 来构建共​​享库

    我正在尝试创建一个非常基本的手工制作的 Makefile 来创建一个共享库来说明一点 这是我到目前为止所拥有的 SHELL bin sh CC gcc FLAGS std gnu99 Iinclude CFLAGS fPIC pedanti
  • “make”是否可以检查依赖项的 mtime 在运行之间是否“不同”,而不仅仅是它是否比目标新?

    如果 foo user cpp 依赖于 foo h 则构建了 foo user cpp 然后将 foo h 的修改时间设置为更早的时间 make 将不会重建 foo user cpp 因为 foo cpp 是 较新的 我更希望 make 记
  • echo 命令,然后运行它? (如制作)

    有没有某种方法可以让 bash 进入一种详细模式 这样 当它运行 shell 脚本时 它会在运行之前回显将要运行的命令 也就是说 这样就可以看到运行的命令 以及它们的输出 类似于make 也就是说 如果运行像这样的 shell 脚本 ech
  • Makefile 依赖项,什么是依赖项?

    我有一个关于 makefile 依赖关系的概念性问题 这是因为我在网上看到了关于此的不一致之处 假设我有以下文件 main cpp uses gt my math cpp and my strings cpp my math cpp use
  • Android.mk 包含其他项目

    说明 我的问题的目标是了解如何创建一个可以构建和运行的 Android mk makefile 如下所示的项目结构 Library is library on eclipse 数据 项目库 Project Interface 包含 1 个静
  • 如何在 GNU Make 的定义中使用 ifeq?

    我正在尝试在 Makefile 中的定义内执行 ifeq 但我似乎遇到了一些错误 并且我想知道是否遗漏了某些内容 我有以下 Makefile info start ifeq X Y info DOES not appear 1 endif
  • 使用 gnu make 正确构建 git 子模块

    我目前尝试编写一个 Makefile 来正确构建一个包含 git 子模块的项目 该子模块有自己的一组 makefile 并一次生成多个目标 包括一些库 该 Makefile 应具有以下属性 即使使用并行构建 也不要重建两次子模块 当子模块代
  • Makefile 头依赖项

    我是使用 make 的新手 并且一直在通过以下方式学习基础知识本教程 http www cs colby edu maxwell courses tutorials maketutor 这是本教程中的最后一个 makefile 示例 IDI
  • 如何链接 ndk 应用程序中的任何库

    From 本教程 http marakana com forums android examples 49 html 看到我有一个预构建的静态库 名为stackoverflow a它有stackoverflow h 现在我想使用该静态库的功
  • Readelf 报告程序是共享库而不是可执行文件

    使用独立的 Android NDK r10e 工具链 使用 toolchain x86 clang3 6 开关构建 出现这种奇怪的行为 交叉编译的环境变量已设置在运行makefile之前 SYSROOT指向Android工具链位置 CXX等
  • 错误:安装 ffi 时出错:错误:无法构建 gem 本机扩展

    我在 Mac 64 位系统中遇到此错误 并且机器上安装了 xcode Building native extensions This could take a while ERROR Error installing ffi ERROR F
  • 强制 Makefile 中依赖项的顺序

    我有一个 Makefile 我想并行使用它来编译一组单独的程序 它看起来像这样 compileall program1 program2 program3 echo Compilation completed program1 progra
  • /usr/sbin/install 到底有什么作用?

    我正在尝试安装discount https github com Orc discount on my VPS http no de它基于Solaris 设置一些环境变量后编译效果很好 但是安装失败 https gist github co
  • GNU Make 与 patsubst:需要两次替换

    我需要在变量替换的替换中引用词干两次 O23 OROOTS ODIR overx 2wk 3wk mlb 我需要使用相同的词干执行两次替换 但是替换使用patsubst这只做第一个 我们怎样才能同时实现这两点呢 事实上 杰克几乎猜对了 fo
  • 构建 gradle 系统应用程序作为 AOSP 构建的一部分

    我有一个基于 AOSP 的自定义 ROM 并且正在开发一个系统应用程序 该应用程序在 ROM 构建期间打包 就像任何其他系统应用程序一样 是否可以将此应用程序切换为 gradle 样式应用程序 并在 AOSP 构建期间使用 gradle 构
  • 对 sf:: 的未定义引用

    我想用 C 制作 GUI 应用程序 发现 SFML 是一个不错的选择 幸运的是 我使用的是 Linux 所以 SFML 2 4 已经安装在我的系统上 所以我开始搜索一些教程并找到了一个制作简单窗口的教程 但是当我运行代码时 出现错误 提示未

随机推荐