問題:我只想運行一個腳本(例如run.sh),它將決定是否應該調用make
(並在需要時調用它)以及然後運行可執行文件。只有在main.c被修改時才調用腳本
我的項目只有一個文件,那就是main.c.然而,只是鏈接讓我稍微等一下,當我調試時我不喜歡這些東西,而且我非常希望程序能夠運行。我想這樣的事情到run.sh:
#!/bin/bash
if[ main.c has changed from the last time make was called] then
make > compile.txt
fi
./a.out
使得make
只有main.c中被修改時調用。通過修改,可以認爲時間戳發生了變化(即使這可能不是實際的標準)。這是可行的嗎?
如果是這樣,我看到這個answer,這讓我覺得我每次進入if語句調用做,main.c中的拷貝將被創建,或文件的時間戳的身體將被存儲(也許在一個文件中),以便下次腳本運行時,它將恢復該信息並檢查是否條件以查看時間戳是否不同。所以,第二個問題是,怎麼做?
'如果已修改'main.c'(假設下make'只會重新編譯你的程序只包含'main.c')。 「make」運行並不需要很長時間,或者它不應該。那麼,你試圖解決什麼問題?如果你沒有改變文件的內容,爲什麼'main.c'上的修改時間會改變?你有沒有在你的makefile中有一些失敗的規則,這樣即使你沒有改變任何東西,程序也會被鏈接到每一次? (見[''make'每次編譯一些程序,即使它們只是被編譯了])(http://stackoverflow.com/questions/31151069/)) –
@JonathanLeffler是的,它沒有。我只是說,因爲我看到了使用觸摸的答案。我說這是爲了簡單。如果文件被修改,時間戳肯定會有所不同,這就是爲什麼我有這個想法。感謝您的評論。我將編輯。現在好多了? :) – gsamaras
(1)如果您正在調試並更改代碼,則需要重新構建以查看更改後的代碼的效果。這意味着你需要重新鏈接。 (2)如果'main.c'沒有改變,那麼你的程序將不會被重新鏈接,除非你的'makefile'中有一個錯誤,當不需要時強制重新鏈接。如果(2)是你的問題,修復你的'makefile'。如果(1)是您的問題,那麼爲什麼在您準備重新編譯程序之前保存編輯。或者你爲什麼不直接運行'a.out'而不是運行腳本。基本上,你似乎有一個方法論問題;你濫用'make' ... –