2017-03-01 9 views
0

コンパイルするいくつかの.cファイルを生成するので、他のルールの前に実行する必要があるpythonスクリプトがあります。しかし問題がある。私のメイクファイルでコンパイルが必要な自動生成されたファイルの依存関係を見つけるためのmakeの設定方法

私が最初に実行するPythonスクリプトを必要とする、私は

SRC = autogenerated_file1.c autogenerated_file2.c 

depend dep: .depend 
include .depend 

を依存にするルールを持っている。しかし、問題は、ファイルがメイクファイルが依存にするために実行されたときに存在してはいけないですどのように私は依存のインクルードの前に実行するルールを設定しますか?

ご協力いただければ幸いです。

私は私のメイクを簡素化し、それをここに提供:

SUBDIRS = ../modules/mod1 \ 
      ../modules/mod2 \ 
      ../modules/mod3 

CFLAGS=-g -Wall 
ARFLAGS=rs 

CFLAGS:=$(CFLAGS) -I. 

APPLICATION_FILES = main.c autogen1.c autogen2.c 

APPLICATION_OBJ=$(APPLICATION_FILES:.c=.o) 

-include $(APPLICATION_FILES:.c=.d) 

.PHONY: dummy 
dummy: 
    cd ../scripts && \ 
    python autgen_files.py 

%.o: %.c 
    $(CC) $(CFLAGS) -c $< -o [email protected] 

clean : 
    rm -f *.o *.elf *.d 
    -for d in $(SUBDIRS); do (cd $$d; $(MAKE) clean); done 

%.fin: dummy $(SUBDIRS) %.elf 

$(SUBDIRS): 
    $(MAKE) -C [email protected] 

%.d : %.c 
    $(CC) -MM $(CFLAGS) $*.c > $*.d 

%.elf: $(APPLICATION_OBJ) 
    $(CC) -Tapp.ld $(CFLAGS) -o [email protected] $^ 

ここでの問題はautogen1.cとautogen2.cはメイクの開始時には利用できないです。私が上で提供したことをすれば、それは再帰的なmakeのループに巻き込まれます。

私はビルドを開始する方法は、Pythonスクリプトは、ファイル.dependを生成する場合、(それは私の理解だが、私は完全にはよく分からない)

答えて

0

を「test.fin作る」このルールを追加していると言う必要があります。

.depend: script.py 
     $< 

この方法メイクは.dependも行われる必要がある対象であり、それが.dependより新しいですか.dependが存在しない場合場合script.pyを実行することを知っているだろう。微妙な味わい。

これはGNU Makeでのみ機能するかもしれないことに注意してください。

+0

これは機能しません、私はMAKE_RESTARTSを取得し続け、ループでPythonスクリプトコードを呼び出し続けます... – Godspped

+0

私のために働きます。あなたはmakeがGNU Makeであることを絶対に確信していますか?あなたのスクリプトは実際に '.depend'を生成しますか?おそらくあなたのスクリプトの日付は将来ですから、常に '.depend'より新しいですか?それは私がこの時点で持っているすべてのアイデアです... –

関連する問題