Ini Makefile saya:
REBAR=./rebar
REBAR_COMPILE=$(REBAR) get-deps compile
all: compile
compile:
$(REBAR_COMPILE)
test:
$(REBAR_COMPILE) skip_deps=true eunit
clean:
-rm -rf deps ebin priv doc/*
docs:
$(REBAR_COMPILE) doc
ifeq ($(wildcard dialyzer/sqlite3.plt),)
static:
$(REBAR_COMPILE) build_plt analyze
else
static:
$(REBAR_COMPILE) analyze
endif
Saya bisa berlari make compile
beberapa kali dan mendapatkan
aromanov@alexey-desktop:~/workspace/gm-controller/lib/erlang-sqlite$ make compile
./rebar get-deps compile
==> erlang-sqlite (get-deps)
==> erlang-sqlite (compile)
Namun, untuk beberapa alasan berlari make test
selalu memberi
aromanov@alexey-desktop:~/workspace/gm-controller/lib/erlang-sqlite$ make test
make: `test' is up to date.
bahkan jika file tidak dikompilasi. Pertanyaannya adalah, mengapa?
Menjalankan perintah yang sama secara langsung berfungsi:
aromanov@alexey-desktop:~/workspace/gm-controller/lib/erlang-sqlite$ ./rebar get-deps compile skip_deps=true eunit
==> erlang-sqlite (get-deps)
==> erlang-sqlite (compile)
Compiled src/sqlite3_lib.erl
Compiled src/sqlite3.erl
==> erlang-sqlite (eunit)
...
all
,,test
danclear
apakah nama target makefile Andatest
untuktest_rule
atau sesuatu yang berbeda.EDIT: Ini hanya berlaku untuk beberapa versi
make
- Anda harus memeriksa halaman manual Anda.Anda juga dapat meneruskan
-B
bendera kemake
. Sesuai halaman manual, ini tidak:Jadi
make -B test
akan menyelesaikan masalah Anda jika Anda berada dalam situasi di mana Anda tidak ingin mengeditMakefile
atau mengubah nama folder tes Anda.sumber
-B
adalah mode kompatibel-mundur untuk saya ... (FreeBSD, OS / GNU toolkit tampaknya tidak ditentukan dalam pertanyaan)--always-make
berhasil untuk Anda?.PHONY
Target tampaknya jenis meskipun portabel ... (Setidaknya untuk FreeBSD, tidak yakin tentang hal-hal seperti Solaris)--always-make
opsi untuk bekerja, makefile Anda rusak.Itu terjadi ketika Anda memiliki file dengan nama yang sama dengan nama target Makefile di direktori di mana Makefile hadir.
sumber
kesalahan saya adalah membuat nama target "filename.c:" bukan hanya "filename:"
sumber