1 つのルールを同時に 2 つのファイルに依存させ、それらのファイルのいずれかが変更されたときにルールを 1 回だけ実行することは可能ですか?
SASS ソース ファイルのコンパイルを Makefile に追加しています。コンパスでコンパイルしましたが、ソース フォルダーと宛先フォルダーが指定された独自の構成があります。コンパスはパラメーターなしで実行され、変更されたすべての SASS ファイルを対応する CSS ファイルにコンパイルします。
2 つの SASS ファイルがあるとします。
folder1/file1.scss
folder2/file2.scss
両方のファイルが変更されている場合、compass を 1 回だけ実行すると、両方のファイルがコンパイルされます。Compass を 2 回実行する必要はありません。いずれかまたは両方のファイルが変更された場合にコンパイルを 1 回だけ実行できる Makefile を作成できますか? 次のように言います。
folder_out1/file1.css folder_out2/file2.css: folder1/file1.scss folder2/file2.scss
compass compile
編集- FreeBSD で動作する修正済みスクリプト (いくつかの小さな変更を加えたもの):
#!/usr/bin/env bash
# Start fresh: delete all files and folders
rm -rf folder folder_out Makefile.mock mock_compass
# Create the input folder and files
mkdir folder
echo 1 > folder/file1.scss
echo 2 > folder/file2.scss
# Create mock compass command that creates output directories and copies
# input files to output files without transforming them
echo '
#!/usr/bin/env bash
if ! [ -d folder_out ]; then
mkdir folder_out
fi
cp folder/file1.scss folder_out/file1.css
cp folder/file2.scss folder_out/file2.css' > ./mock_compass
chmod +x mock_compass
# Create the Makefile
echo -e '
# Disable implicit rules to simplify debugging output
.SUFFIXES:
%: %,v
%: RCS/%
%: RCS/%,v
%: s.%
%: SCCS/s.%
folder_out/file1.css folder_out/file2.css: folder/file1.scss folder/file2.scss
\t@echo Running compass
\t./mock_compass
' > Makefile.mock
# Test it!
echo 'Initial build:'
gmake -f Makefile.mock
echo
echo 'Changing only file1'
touch folder/file1.scss
gmake -f Makefile.mock
echo
echo 'Changing only file2'
touch folder/file2.scss
gmake -f Makefile.mock
echo
echo 'Changing both'
touch folder/file1.scss folder/file2.scss
gmake -f Makefile.mock
echo