首页 > 解决方案 > 如果使用特定的内核构建 Makefile

问题描述

我真的在为这个 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 中实现它。

标签: makefile

解决方案


正如错误所说,您需要提供一个构建目标。除了变量赋值之外不包含任何内容的生成文件不会做任何事情。也许您想添加:

all:
        @echo 'DIRS = $(DIRS)'

看看你获得了什么价值。

但是,我已经可以看到这不会像所写的那样工作。Makefile 语法不是 shell 语法,因此该语句$(uname -r)试图扩展一个名为的 make 变量uname -r(就像$(FOO)试图扩展一个名为 的 make 变量一样FOO)。该变量未设置,因此UNAME将始终设置为空字符串。

你可能想要这个:

UNAME := $(shell uname -r)

调用 makeshell函数以运行 shell 脚本并展开结果。


推荐阅读