2015-11-02 2 views
1

У меня была проблема с GNU make на cmd.exe. Как-то он игнорирует вывод «/» на dir и говорит, что правила отсутствуют.GNU make игнорирует slash на cmd.exe

$(foreach f,$(OBJS),$(eval $f : | $(dir $f))) 

%/: 
    mkdir -p [email protected] 

Так что я сделал этот грязный взлом.

$(foreach f,$(OBJS),$(eval $f : | $(dir $f)D)) 

%/D: 
    mkdir -p [email protected] 

Любое лучшее решение? Пожалуйста, не говорите мне, чтобы бросить сломанную раковину. Я не использую оболочку, но другие ее используют.

ответ

0

Насколько я знаю, сопоставление целевых образцов не имеет ничего общего с оболочкой, в конечном итоге будет использоваться для запуска целей рецепта. Это делается исключительно внутри страны.

Это говорит о том, что точный фрагмент файла makefile (с использованием OBJS := a/a.o b/b.o c/c.o) работает для меня с make 3.81, 3.82, 4.0 и 4.1 на CentOS 5. (У меня нет проверки на Windows для тестирования.) Может быть, есть что-то ОС -специфическое участие здесь.

Вы пытались удалить / и использовать % в качестве цели?

Что все сказано, лучшим решением может быть назначение компонентов каталога переменной и использование этой переменной в качестве цели.

DIRS := 
$(foreach f,$(OBJS),$(eval $f : | $(dir $f)) $(eval DIRS += $(dir $f))) 

$(DIRS): 
    mkdir -p [email protected] 
+0

Да, это работает без '/', но я предпочитаю трюк DIRS. Спасибо. – 173210