2015-06-12 9 views
0

У меня есть makefile, содержащий код ниже.Как создать ссылку на каталог в makefile в Linux?

ddd : 
    @mkdir -p /full/path_new/to/new_dir 
    @ln -fs /full/path_old/to/old_dir/private /full/path_new/to/new_dir/private 

Команда Linux ln создает ссылку в обоих тегах tag и parent. Это означает, что у меня есть:

/full/path_new/to/new_dir: 
private -> /full/path_old/to/old_dir/private 

но старый один получает ссылку

/full/path_old/to/old_dir/private 
private -> /full/path_old/to/old_dir/private 

Это вызывает у меня что-то вроде

/full/path_old/to/old_dir/private/private/private/private (...) endless 

Как следует использовать пер команды, чтобы иметь связь в new_dir только ?

+0

Как в стороне, положить '@' на все, что вы делаете, безумен. Запустите с 'make -s' или укажите' .SILENT: ddd' вместо этого. – tripleee

ответ

1

Вы должны удалить существующую ссылку, прежде чем создать его:

ddd : 
     @mkdir -p /full/path_new/to/new_dir 
     @rm -f /full/path_new/to/new_dir/private 
     @ln -fs /full/path_old/to/old_dir/private /full/path_new/to/new_dir/private 
0

Предполагая, что чистый лист, правильный способ сделать это было бы создать цель, которая знает, какие DEPENDENCY он создает, и избежать создавая его, если он существует.

ddd: /full/path_new/to/new_dir/private 
/full/path_new/to/new_dir/private: 
    mkdir -p /full/path_new/to/new_dir 
    ln -s /full/path/to/old_dir/private /full/path_new/to/new_dir 
+0

Вы все равно должны удалить сначала или использовать '-f'. Если символическая ссылка существует, но указывает на недопустимый каталог, тогда make будет считать, что она не существует и запускает 'ln', что не удастся. – MadScientist

+0

Хотя, может быть, он должен * сбой в этом случае? – tripleee

+0

Возможно, конечно, но мне трудно представить себе сценарий, в котором отказ был бы предпочтительным. – MadScientist

Смежные вопросы