我真的很纠结这个Makefile。我有一个应用程序,我想在一台旧的 Fedora 计算机上构建,但也要在一台新的 CentOS 计算机上构建。我想根据我使用的计算机更改变量。
这是我尝试过的,但它似乎不起作用。
UNAME := $(uname -r)
ifeq ($(UNAME),2.6.32.11-99.fc12.x86_64)
DIRS = Control Simulator
else
DIRS = Control
endif
我的问题是,如何让它在一些独立的 Makefile 中工作以进行测试?这给了我"***没有目标。当前停止"错误。之后,我应该能够在我真正的 Makefile 中实现它。
正如错误所说,您需要提供一个要构建的目标。 不包含变量赋值以外的任何内容的生成文件不会执行任何操作。 也许您想添加:
all:
@echo 'DIRS = $(DIRS)'
看看你获得了什么价值。
但是,我已经可以看到这不会像写的那样工作。 Makefile 语法不是 shell 语法,因此语句$(uname -r)
尝试扩展名为uname -r
的 make 变量(就像$(FOO)
尝试扩展名为FOO
的 make 变量一样(。 未设置该变量,因此UNAME
将始终设置为空字符串。
您可能想要这个:
UNAME := $(shell uname -r)
以调用 makeshell
函数以运行 shell 脚本并展开到结果。