Makefile и переменные окружения под Cygwin - PullRequest
0 голосов
/ 20 июня 2011

Я пытаюсь написать Makefile для проекта, который будет скомпилирован с GNU make в Cygwin. Некоторые переменные среды определены в Windows, например, путь к некоторому SDK. Например, SDKPATH C:\MySDKPath.

В Makefile я использую этот путь для доступа к каталогу include SDK, среди прочего:

CFLAGS := -I$(SDKPATH)/include

В целевом правиле: $(CC) $(CFLAGS) $< -o $@

Моя проблема в том, что после того, как make расширит его до C:\MySDKPath/include и передаст его в качестве аргумента компилятору, аргумент будет расширен до C:MySDKPath/include, что, очевидно, не является намерением.

Я не могу реально изменить переменную среды, так как она устанавливается SDK, и требование к ней каждого из нас приведет к возникновению новых проблем. Я мог бы сделать быстрый и грязный поиск и замену (например, MYSDKPATH := $(patsubst C:%,/cygdrive/c%,$(subst \,/,$(SDKPATH)))), но мне интересно, нет ли чистого, устоявшегося способа справиться с этим вероятным распространенным случаем.

Ответы [ 2 ]

1 голос
/ 19 января 2012

Поскольку вы используете cygwin, вы можете использовать cygpath для преобразования между стилями пути.

CFLAGS := -I$(shell cygpath -ua "$(SDKPATH)/include")

Должен сделать свое дело.

1 голос
/ 20 июня 2011

Это довольно уродливый клудж, но, похоже, он работает в UNIX, так что попробуйте в Cygwin.

# In the makefile
SDKPATH := $(shell echo $$SDKPATH | sed 's:\\:/:g')
...