Бег делают из-за пределов Дерева - PullRequest
0 голосов
/ 13 июля 2011

Допустим, у меня есть make-файл, подобный следующему:

CXXFLAGS := -I./Include

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

Если пользователь cd s в дерево исходных текстов и запускает make, все нормально. Однако, если make вызывается из-за пределов дерева исходных текстов, каталог include будет неправильным.

Использование полных путей вместо относительных путей работает, но это разрушает переносимость make-файла.

Стоит ли полагаться на пользователей, которые правильно вызывают make? Или есть простой способ обойти это?

Ответы [ 3 ]

2 голосов
/ 13 июля 2011

Если вы хотите, чтобы 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.

2 голосов
/ 05 августа 2011

Используйте флаг -C.

make -C my_dir
1 голос
/ 13 июля 2011

Вы можете представить своим пользователям команду компиляции, которая выглядит как (cd /to/proper/directory && make -k)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...