Make
Makefile 替代那些不希望標籤縮進開瓶器下所有內容的人
make
如果不想在我的make
程序(或類似)程序中使用製表符縮進,是否有 GNU替代make
方案?例如,當我使用 時
make
,我需要在make
開場符 (% :
) 之後縮進所有內容。這是在某些情況下解決某些問題的秘訣(例如,我跨平台工作,我使用 Windows10 AutoHotkey 機制,該機制從我粘貼到 Linux 終端的程式碼中剝離標籤,出於不同原因,它不會通過,make
因此我需要一個非標籤包括解決方案)。對所有內容進行製表符縮進的必要性
% :
使我的工作make
不流暢。這是
make
我用來創建新的虛擬主機 conf 文件的。我執行它make domain.tld.conf
:% : printf '%s\n' \ '<VirtualHost *:80>' \ 'DocumentRoot "/var/www/html/$@"' \ 'ServerName $@' \ '<Directory "/var/www/html/$@">' \ 'Options +SymLinksIfOwnerMatch' \ 'Require all granted' \ '</Directory>' \ 'ServerAlias www.$@' \ '</VirtualHost>' \ > "$@" a2ensite "$@" systemctl restart apache2.service
是否有任何替代方案,也許是 Unix 本身提供的提供類似功能但不必在模式文件本身中使用製表符縮進的東西?
如果這是您的整個 Makefile,並且您沒有跟踪文件之間的任何依賴關係,則只需使用 shell 腳本:
#!/bin/sh for domain; do > "/etc/apache2/sites-available/${domain}.conf" cat <<EOF <VirtualHost *:80> DocumentRoot "/var/www/html/${domain}" ServerName "${domain}" <Directory "/var/www/html/${domain}"> Options +SymLinksIfOwnerMatch Require all granted </Directory> ServerAlias www.${domain} </VirtualHost> EOF a2ensite "${domain}" done systemctl restart apache2.service
將以上內容複製到名為 example 的文件中
create-vhost
,使其可執行:chmod 755 create-vhost
然後執行它
./create-vhost domain.tld
這甚至支持創建多個虛擬主機的配置文件(最後一次重啟):
./create-vhost domain1.tld domain2.tld
GNU Make 的
.RECIPEPREFIX
變數(注意:不是一個特殊的目標)可以用來改變引起配方行的字元。例如:
.RECIPEPREFIX=> %: >printf '%s\n' \ >'<VirtualHost *:80>' \ >'DocumentRoot "/var/www/html/$@"' \ >'ServerName $@' \ >'<Directory "/var/www/html/$@">' \ >'Options +SymLinksIfOwnerMatch' \ >'Require all granted' \ >'</Directory>' \ >'ServerAlias www.$@' \ >'</VirtualHost>' \ >> "$@" >a2ensite "$@" >systemctl restart apache2.service