假设我有一个如下所示的makefile:
CXXFLAGS := -I./Include
Foo:
$(CXX) $(CXXFLAGS) -o Foo
如果用户cd
进入源树并运行make
,一切都很好,花花公子。但是,如果从源树之外的某处调用make
,则include目录将不正确。
使用完整路径而不是相对路径可以工作,但这会破坏makefile的可移植性。
我应该依靠用户正确调用make
吗?“或者有一种简单的方法来解决这个问题吗?
答案 0 :(得分:2)
如果您希望CXXFLAGS
成为-Isome_dir/Include
当make
被调用为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)