簡體   English   中英

如何在Makefile中使用wc監視更改並在每次更新時運行命令?

[英]How to use wc in Makefile to watch for changes and run a command at each update?

我正在嘗試讓它在Gnu Make中工作。

我正在測試Makefile中的wc手表。

我有一個文件,每當檢測到更改時都需要編譯該文件,它應該在運行2個並行命令的規則中運行配方。 一個編譯CSS,另一個重新加載瀏覽器。

如果我使用cssnext --watch的內置watch命令,我的設置工作正常,但是我想用wc來完成

這是代碼

BIN := node_modules/.bin

all: assets/css/style.css
assets/css/style.css: sources/style.css
    @mkdir -p $(@D)
    @set -e ; \
    while true;\
    do \
        $(shell wc -c "sources/style.css")\
        $(BIN)/cssnext $^ $@& $(BIN)/instant 3000;\
        sleep 1;\
    done

當我做make all ,它顯示

"D:/Program Files (x86)/Git/bin/sh.exe": line 4: 343: command not found
 •∙ listening on port 3000 and waiting for changes

我是GNU Make的新手,我無法理解。

更新:如果我使用bash腳本。 使用以下代碼創建一個watchfile.sh文件:

#!/bin/bash
clearline="\b\033[2K\r"

command=$@

while sleep 1;
do
    # watch each character change
    eval "wc -c $command"
    echo -n -e "$clearline"
done

然后將Makefile的代碼替換為

    ./watchfile.sh $^
    $(BIN)/cssnext $^ $@& $(BIN)/instant 3000;

我在外殼中得到以下內容

 •∙ listening on port 3000 and waiting for changes     344 sources/style.css
    284 node_modules/.bin/cssnext
    344 sources/style.css
    263 assets/css/style.css
   1235 total

我不知道為什么還要查看其他文件,我只指定了sources/styles.css

如果我在css文件中進行更改,它將顯示字符數更改。 但是source / style.css文件未編譯到目標。 Shell僅顯示一次又一次地翻轉wc命令。

我做了一個小小的改動,它反映在wc shell中

322 sources/style.css
284 node_modules/.bin/cssnext
322 sources/style.css
263 assets/css/style.css
1191 total

但是現在的問題是它沒有編譯甚至沒有重新加載瀏覽器。

另一個問題是,現在wc命令不會停止循環。 即使在我執行CTRL+C 我必須關閉終端

另外,我寧願不使用watchfile.sh腳本,而是在Makefile中執行它。

如果堅持使用make,只需編寫一個Makefile即可編譯CSS等。這就是make的用途,運行make並編譯所有已更改的內容。

要使編譯自動進行,可以使用watch實用程序,該實用程序定期運行make

watch make

可以滿足您的需求。 有關此問題的更多信息: 是否有比“手表制造”更聰明的選擇?

我知道它可以與Makefile + NPM一起使用。 雖然我需要完整的Makefile解決方案。 無論如何,現在就可以使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM