相关疑难解决方法(0)

递归make:插入`$(MAKEFLAGS)`的正确方法

我如何使用$(MAKEFLAGS)(或以其他方式将在命令行上定义的变量传递给sub-make)以支持从shell调用的方式使用make VAR=valmake -args

我需要我的子项目可配置,但我讨厌autotools,所以我正在使用make变量,例如从shell调用:

$ make USE_SSE3=1
Run Code Online (Sandbox Code Playgroud)

并且USE_SSE3需要应用于所有子makefile中的所有构建.

手册指出:

如果你做'make -ks'那么MAKEFLAGS获得值'ks'.

因此我-$(MAKEFLAGS)在Makefile中使用(带有破折号前缀).

但是,当使用没有标志的变量时,它会扩展为无效参数.如果我跑:

$ make FOO=bar
Run Code Online (Sandbox Code Playgroud)

然后sub-make变得无效-FOO=bar.没有破折号前缀变量定义的OTOH工作,然后make -s等等.

是否有语法/变量/ hack使得传递参数单独的变量定义与子makefile一起使用?

遗产$(MKFLAGS)没有奇怪的短划线前缀问题,但它也不包括变量定义.我已经尝试修复变量$(patsubst),但这只会通过修剪空白使事情变得更糟.

我需要的解决方案与Mac OS X Mavericks附带的过时的GNU Make 3.81兼容.


foo:
    $(MAKE) -C subproject -$(MAKEFLAGS)
Run Code Online (Sandbox Code Playgroud)
$ make foo -s       # MAKEFLAGS = 's'
$ make foo BAR=baz  # MAKEFLAGS = 'BAR=baz'
$ make foo -j8      # MAKEFLAGS = …
Run Code Online (Sandbox Code Playgroud)

makefile

8
推荐指数
1
解决办法
7156
查看次数

从MAKECMDGOALS中删除目标?

我的makefile文件中包含以下内容。其为GNUmakefile,因此支持其他制造功能:

# Undefined Behavior Sanitzier (Clang and G++)
ifeq ($(findstring ubsan,$(MAKECMDGOALS)),ubsan)
CXXFLAGS += -fsanitize=undefined
MAKECMDGOALS := $(subst ubsan,,$(MAKECMDGOALS))
endif # UBsan    
Run Code Online (Sandbox Code Playgroud)

运行它会导致:

make ubsan
make: *** No rule to make target 'ubsan'. Stop.
Run Code Online (Sandbox Code Playgroud)

我知道代码路径正在执行中(通过在块中引入错误)。如何从命令目标中删除目标?

makefile gnu-make

8
推荐指数
1
解决办法
4158
查看次数

在构建任何目标后强制 Makefile 执行脚本(就在退出之前)

我想在 make 退出时执行一个 shell 命令,不管它构建的是什么目标。似乎 make 没有办法直接做到这一点。但是,这里有一个在启动时执行 shell 命令的示例,无论目标如何:

强制 Makefile 在构建目标之前执行脚本

是否有任何类似的 hack 在退出前执行一次 shell 命令?我可以将命令放在每个目标的底部,但是 a) 它会被执行多次,并且 b) 这很丑陋且难以管理。

shell makefile

5
推荐指数
1
解决办法
3242
查看次数

如何从 Makefile 设置 MAKEFLAGS,以删除默认的隐式规则

我尝试以下 makefile:

MAKEFLAGS += s
MAKEFLAGS += r

configure:
Run Code Online (Sandbox Code Playgroud)

然后,当我运行 make 时,出现以下错误,就好像它想根据某些默认隐式规则编译“配置”一样:

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 12
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 2 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 3 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 4 has invalid symbol index 11
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 5 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 6 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation …
Run Code Online (Sandbox Code Playgroud)

makefile

4
推荐指数
1
解决办法
5228
查看次数

如何检测是否使用rake指定了--quiet选项

如何检测是否使用rake指定了--quiet选项.

意图是根据类别过滤自定义消息.

class Category
  INFO = 1
  WARNING = 2
  ERROR = 3
end

@trace = true

task :silent do
  @trace = false
end

def trace(msg, category=Category::INFO)
  return if (@trace == nil)
  return if ((@trace == false) && (category == Category::INFO))
  puts msg
end
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果指定了--quiet选项,我想添加一个案例来过滤掉trace.

ruby rake

3
推荐指数
1
解决办法
1567
查看次数

标签 统计

makefile ×4

gnu-make ×1

rake ×1

ruby ×1

shell ×1