从树外跑步

时间:2011-07-13 02:28:35

标签: directory makefile

假设我有一个如下所示的makefile:

CXXFLAGS := -I./Include

Foo:
    $(CXX) $(CXXFLAGS) -o Foo

如果用户cd进入源树并运行make,一切都很好,花花公子。但是,如果从源树之外的某处调用make,则include目录将不正确。

使用完整路径而不是相对路径可以工作,但这会破坏makefile的可移植性。

我应该依靠用户正确调用make吗?“或者有一种简单的方法来解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

如果您希望CXXFLAGS成为-Isome_dir/Includemake被调用为make -f some_dir/Makefile时, MAKEFILE_LIST 可能符合目的。
例如:

MAKEFILE_DIR := $(dir $(lastword $(MAKEFILE_LIST)))
CXXFLAGS := -I$(MAKEFILE_DIR)Include

如果您的make版本为3.80或更低版本,lastword可能无效。
在那种情况下, $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))会改为工作。

编辑:这个答案适用于GNU-make。

答案 1 :(得分:2)

使用-C标志。

make -C my_dir

答案 2 :(得分:1)

您可以向用户显示一个类似于(cd /to/proper/directory && make -k)

的编译命令