相关疑难解决方法(0)

GNU在多行变量声明中有所区别

我读了这个问题,我很惊讶它不起作用:

为什么GNU Make罐头食谱不起作用?

所以我自己尝试了,并得到了相同的结果.这是一个示例makefile:

define foo
bar
baz
endef

define bar = 
foo
baz
endef

$(info foo: $(foo))
$(info bar: $(bar))

all:
Run Code Online (Sandbox Code Playgroud)

这是运行它的输出:

$ make
foo: bar
baz
bar: 
make: Nothing to be done for `all'.
Run Code Online (Sandbox Code Playgroud)

这里发生了什么事?在GNU进行手动似乎表明,这两个变量的声明应该是一样的-我错过什么吗?

编辑:

我所指的手册中的一些引用:

3.7如何读取Makefile

define immediate
  deferred
endef

define immediate =
  deferred
endef
Run Code Online (Sandbox Code Playgroud)

5.8定义罐装食谱

以下是定义罐装食谱的示例:

 define run-yacc =
 yacc $(firstword $^)
 mv y.tab.c $@
 endef
Run Code Online (Sandbox Code Playgroud)

6.8定义多行变量

...如果您愿意,可以省略变量赋值运算符.如果省略,make假定它为'='并创建递归扩展变量...

如您所见,罐装食谱部分明确使用了该=案例.我正在使用GNU Make 3.81.

variables makefile

26
推荐指数
2
解决办法
2687
查看次数

与 GNU Make 链接时参数列表太长

我有一个相当大的项目(4272 .o 文件),但无法将其与 GNU Make 链接。我遇到了make: /bin/sh: Argument list too long。这是一个使用 qmake 生成 makefile 的 Qt 5 项目。

我知道有很多关于此的问题,但我不知道如何将任何解决方案应用于我的问题。我也不完全确定为什么我在链接步骤中遇到这个问题。我得到的错误是:

make: /bin/sh: Argument list too long

用于链接我的项目的 makefile 条目如下所示:

build/debug/my_target/my_target:  $(OBJECTS)  
    @test -d build/debug/my_target/ || mkdir -p build/debug/my_target/
    $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
Run Code Online (Sandbox Code Playgroud)

它扩展到类似:

@echo linking /build/debug/my_target/my_target && clang++ -ccc-gcc-name g++ -lc++ -L/path/to/licensing/lib -Wl,-rpath,/path/to/qt/lib -Wl,-rpath-link,/path/to/qt/lib -o build/debug/my_target/my_target build/debug/my_target/obj/object1.o build/debug/my_target/obj/object2.o ... build/debug/my_target/obj/object4272.o  ... [ a bunch of moc_X.o ] ... [ a bunch of libs ] …
Run Code Online (Sandbox Code Playgroud)

linux makefile gnu-make clang++

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

标签 统计

makefile ×2

clang++ ×1

gnu-make ×1

linux ×1

variables ×1