在 gnu Makefile 中组合多个 ifeq 和 ifneq

2024-01-08

如果语法如下,如何添加多个选择

ifeq ($(VAR1),some-string)

结合

ifneq ($(VAR2),some-other-string)

结合更多...

有单线吗?像(幻想代码):

ifeq $VAR1=some-string and not $VAR2=some-other-string

i found 这个答案 https://stackoverflow.com/questions/5584872/complex-conditions-check-in-makefile我不清楚,因为 ifeq 语句中没有方程式。


不,没有and条件运算符(但有一个and可以在条件语句中使用的函数)。这if, and and or条件函数认为空字符串为假,其他任何内容都为真(包括仅包含空格的字符串)。您找到的答案中的第一个建议测试变量是否为空字符串。第二个测试变量是否已定义。在这两种情况下,它都不会测试它们的值是否等于引用字符串。这可能是您不能立即清楚的原因。

在您的(简单)情况下,您可以嵌套条件:

ifeq ($(VAR1),some-string)
  ifneq ($(VAR2),some-other-string)
<do something>
  endif
endif

<do something>当且仅当两个条件都通过时才会被考虑。

对于具有多种条件的复杂情况,您可以计算单独的匹配变量:

MATCH1 := $(if $(strip $(VAR1)),$(patsubst some-string,,$(VAR1)),NO)

多变的MATCH1将取值:

  • NO if VAR1未定义,是空字符串或空格字符串,
  • 如果等于则为空字符串some-string,
  • 否则的值VAR1.

所以,当且仅当它是空字符串VAR1 == some-string。同样适用于NOMATCH1:

MOMATCH1 := $(if $(strip $(VAR2)),$(patsubst some-other-string,,$(VAR2)),NO)

NOMATCH1将为非空当且仅当VAR2 != some-other-string.

现在,您的主要条件可以使用条件函数来表达:

ifeq ($(or $(MATCH1),$(MATCH2),...),)
  ifneq ($(and $(NOMATCH1),$(NOMATCH2),...),)
<do something>
  endif
endif
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 gnu Makefile 中组合多个 ifeq 和 ifneq 的相关文章

  • makefile patternrule 在目标文件名中带有更多通配符

    我需要创建一个特殊的 makefile 规则 最好通过一个示例来解释 也许我们用规则创建文件 test pdf tex pdflatex jobname test tex result pdf tex pdflatex jobname re
  • 有关如何部署 C++ 代码以在任何地方工作的提示

    我不是在谈论制作可移植代码 这更多的是一个分配问题 我有一个中型项目 它对常用库有几个依赖项 例如 openssl zlib 等 它在我的机器上编译得很好 现在是时候将它呈现给世界了 本质上是构建最好的工程 我想制作适用于 Windows
  • Android.mk 与 Application.mk

    我对 Android mk 和 Application mk 的使用有点模糊 我尝试阅读 APPLICATION MK HTML ANDROID MK HTML 在NDK 附带的文档 http developer android com s
  • 为 ARM 交叉编译 zlib

    我尝试为arm poky linux gnueabi交叉编译zlib 但启动 make 时出现错误 zlib 1 2 11 AR HOST ar CC HOST gcc RANLIB HOST ranlib configure prefix
  • Makefiles:从一个目录获取.cpp,并将编译后的.o放在另一个目录中

    我正在开发适用于移动设备 Windows Mobile 6 和 Android 的跨平台 2D 引擎 我的 Windows 版本已基本准备就绪 但我仍需要确保 Android 上也提供相同的功能 我想要的是一个Makefile在项目的根目录
  • 如何在 GNU Make 模式规则中包含路径前缀

    考虑以下 foo bar echo lt gt 假设我们有一个文件1 bar 执行的命令很简单echo 1 bar gt 1 foo 然而 当 包含一个路径 而不仅仅是一个文件名 它开始变得挑剔 我的问题是我想在前面添加另一条路径 bar
  • VIM:有没有一种简单的方法可以从 Vim 管理 Visual Studio 解决方案/makefile 项目? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我尝试使用 Visual Studio 而不是 VIM 插件 但说实话 VS 相对于 VIM 的唯一优势是它能够自动管理我的项目 我知道 VS
  • 在 PATH 中找不到程序“make”

    我在 Eclipse 中遇到 程序 make 未在 PATH 中找到 错误 我检查了路径变量 C cygwin bin JAVA HOME bin ANT HOME bin ANDROID SDK tools ANDROID SDK pla
  • 如何在 makefile 中针对特定目标使用 include 指令

    我只想将 include 指令用于特定目标 当不需要目标时 我不想运行其他 makefile 因为这意味着 makefile 是不必要生成的 那么有没有一种方法可以有条件地使用 include 指令 该指令以目标为条件 或者以某种方式使 i
  • mingw32-make 的目录更改错误

    我正在MinGW32下构建POCO库1 6 0 环境 Windows 7 Ultimate 32位 shell MSYS 执行成功 配置 configure Configured for MinGW config make的内容 POCO
  • 在 makefile 中,当我在 bash 函数内部使用 if 语句时,它会抛出错误

    在 makefile 中 当我在 bash 函数内部使用 if 语句时 它会抛出错误 test foo if a a then echo 1 fi foo hello ERROR bin sh 1 未找到 或与一个 test foo if
  • bash 函数保留制表符补全

    我把函数 make color make 1 ccze A in bashrc获得彩色的 make 输出 他的作品很好 但是make用于选择目标的制表符补全功能丢失 有什么方法可以保留函数中命令的制表符完成 或者我可以做其他事情来实现制表符
  • 如何不在输出中打印 makefile 中的注释

    我有一个像这样的 makefile install somecommand some explanation for next command lastcommand 发生的事情是评论 some explanation for next c
  • 构建 makefile 依赖/继承树

    如果我解释得不好或者问了一些明显的问题 我很抱歉 但我是 Linux 内核的新手 而且有点深入 我们有一个嵌入式 Linux 系统 它附带一个 文档非常糟糕的 SDK 其中包含数百个文件夹stuff 大多数文件夹包含rules make m
  • 并行运行 make 时出错

    考虑以下制作 all a b a echo a exit 1 b echo b start sleep 1 echo b end 当运行它时make j2我收到以下输出 echo a echo b start a exit 1 b star
  • 为什么总是./configure;制作;进行安装;作为 3 个单独的步骤?

    每次从源代码编译某些内容时 都会经历相同的 3 个步骤 configure make make install 我明白 将安装过程分为不同的步骤是有意义的 但我不明白 为什么这个星球上的每个编码员都必须一次又一次地编写相同的三个命令才能完成
  • 如果未设置,则从控制台读取 Makefile 变量

    我正在更新一个从外部源访问某些资源的 Makefile 即存在以下形式的规则 External cvs up 对于不受限制的资源 它可以按预期工作 现在 出现了功能漂移 外部资源需要更复杂的登录 因此规则已更改为与此没有太大不同的内容 Ex
  • .ko 文件是如何构建的

    我正在尝试将我自己的驱动程序移植到Beagle 板 xm arm cortex A8 在移植时我试图弄清楚如何 ko文件实际构建 在我们的Makefile我们只有一个命令来构建 o file 怎样是一个 ko文件已建立 使用Linux 2
  • 从哪里获取 iostream.h

    我正在尝试在 Linux 中做一些事情 但它抱怨找不到 iostream h 我需要安装什么才能获取此文件 这个标准头的正确名称是iostream没有扩展名 如果您的编译器仍然找不到它 请尝试以下操作 find usr include na
  • 避免使用 git 和 make 重新编译

    我在 git 中有两个开发分支 并且经常需要在两者之间进行更改 然而 真正令人沮丧的是 每次我在 git 中更改分支时 整个项目都会重新构建 因为某些文件的文件系统时间戳会发生变化 Ofc makefiles 配置为将项目构建到两个不同的构

随机推荐

  • ServiceLoader.next 导致 NoClassDefFoundError

    我这么问是因为我完全not我确信我做了正确的事 我正在使用 Eclipse 进行 Web 项目 我们在包中将其称为 WebProject 废话 com web project 我希望 WebProject 在运行时加载 JAR 插件 所以我
  • 上下文、AsyncTask 和轮换更改

    这是一个很好的做法吗getApplicationContext 使用 AsyncTask 以便不必附加和分离 Activity以避免内存泄漏when发生旋转变化并且活动被破坏 我认为它应该是正确的 因为我实际上需要一个依赖于洞应用程序的上下
  • 使用 Gmail 凭据登录

    有没有一种方法可以使用 Google 凭据来获取基本用户信息 例如 电子邮件 姓名 性别 并在我的应用程序中使用它们 这就像允许用户使用 Gmail 登录我的应用程序一样 我也问了同样的问题here https stackoverflow
  • ggplot2 二维密度权重

    我正在尝试使用 R 中的 ggplot2 用二维密度轮廓绘制一些数据 我得到一个有点奇怪的结果 首先 我设置了 ggplot 对象 p lt ggplot data aes x Distance y Rate colour Company
  • 如何让 gVim 的 vimdiff 忽略大小写?

    我正在尝试比较两个程序集文件 其中一个文件全部大写 另一个文件全部小写 许多行在大小写和空格方面都是相同的 我尝试了以下操作 同时两个缓冲区处于差异模式 set diffopt icase set diffopt iwhite diffup
  • List.Add 似乎是重复的条目。怎么了?

    我有一堂这样的课 public class myClass public List
  • 计划任务的限制(或者任务持久化是如何实现的)?

    我开始阅读 Hangfire 文档 但没有发现任何有关任务限制的信息 正如声明的那样 任务 或作业 存储在某个地方 由于它们只是代表 据我所知 唯一可以存储的东西是代表 主体 IL 但是可能存在闭包 它为任务提供了一些上下文 例如一些外部服
  • 如何在Python中对二进制文件进行base64编码/解码?

    我正在尝试使用 python 使用以下简单代码对同一图像文件进行编码和解码 但每次输出文件都大于输入文件并且无法打开 这段代码有什么问题 import base64 with open img jpeg rb as image file e
  • 多线程异常和Dispose。为什么 Dispose 没有调用?

    using 语句保证该对象将被调用 Dispose 方法 在此示例中 这种情况没有发生 并且终结器方法也没有调用 为什么这一切 当其他线程发生异常时 如何更改代码以保证处理我的对象 class Program static void Mai
  • JavaScript 中的动态方法调用

    我知道我可以这样做 var myClass my class definition var methodName myMethod myClass methodName p1 p2 pN 但如果有这样的情况我该怎么办 if data som
  • 在 tkinter 画布上绘制 png 图像 python

    我正在尝试使用创建一个简单的游戏tkinter in python 3 5使用画布小部件 对于这个游戏 我需要能够使用透明 png 图像 这是我的代码 from PIL import ImageTk from tkinter import
  • 我可以使用 PHP 读取 .TXT 文件吗?

    当我开始使用 PHP 和 MySQL 编写站点时 我编写的第一个 PHP 脚本之一是初始化数据库的脚本 删除 创建数据库 删除 创建每个表 然后从脚本中的文字加载表 一切正常 呼呼 但我更喜欢从文件中读取数据 而不是在 PHP 脚本中对它们
  • 对 C99 可变长度数组 (VLA) 使用限制限定符

    我正在探索 C99 中简单循环的不同实现如何根据函数签名自动矢量化 这是我的代码 define PRAGMA SIMD Pragma simd define PRAGMA SIMD ifdef INTEL COMPILER define A
  • 调整容器引擎集群上实例类型的大小

    我们的一些容器在内存高于容器引擎集群中当前部署的实例类型时运行得更好 创建容器引擎集群后 是否有推荐的做法来为较大的实例重建容器引擎模板 例如 从 GCE 实例 n1 standard 2 到 n1 highmem 8 来运行具有 8GB
  • 为什么我的配置项没有从 codeigniter 中的 getenv() 条目填充?

    我将 phpdotenv 与 Codeigniter 一起使用 Codeigniter 的环境设置不太适合这个项目 我试图在我的 config php 文件中设置它 config site id getenv APP ID phpdoten
  • 在 Android 中以编程方式撤销权限

    是否可以在 Android Marshmallow 中删除或撤销应用程序的权限 请注意 它应该在运行时完成 因此使用 ADB shell 脚本或将应用程序转换为其字节 DEX 代码是不可能的 因为架构更改不是所需解决方案的选项 仅当您的应用
  • 高效排序 mongodb 地理空间查询的结果

    我有大量文档 例如 loc 10 32 24 34 relevance 0 434 并希望能够有效地执行如下查询 loc geoWithin box 103 10 1 80 43 30 232 与任意盒子 添加二维索引loc使得这非常快速和
  • PHP/GD:更好的高斯模糊

    我想用 GD 库模糊图像 不幸的是 GD 提供的 GAUSSIAN BLUR 效果还不够 我想要更多blurrish
  • ComBox 更改后用时间计算填充列表框

    我这里有一个简单的用户表单 它根据组合框的更改填充列表框 组合框中唯一列表的代码 Private Sub UserForm Initialize used this code to get a dynamic combobox unique
  • 在 gnu Makefile 中组合多个 ifeq 和 ifneq

    如果语法如下 如何添加多个选择 ifeq VAR1 some string 结合 ifneq VAR2 some other string 结合更多 有单线吗 像 幻想代码 ifeq VAR1 some string and not VAR