2012-03-20 2 views
1

을 실행하기 전에 나는이 간단한 규칙이있다. 이 사용자에게 경고합니다 지나치게 장황한다면 난 다음 현재 코드를 사용하고 단지 if [ ! -e $(PHPUNIT) ]; then warn; else test it; done를 추가 할 수도 있지만체크 메이크 규칙

ifneq($(HAS_PHPUNIT),) 
test: testok 
else 
test: testbad 
endif 

testok: src/*Test.php 
    $(PHPUNIT) $?;\ 

testbad: 
    echo "test: failed checking for executable file $(PHPUNIT)";\ 
    echo "  You may need to install phpunit";\ 

(경고, 유효하지 않은 메이크 구문) :

내가 좋아하는 뭔가를하고 싶어 파일 당 한 번.

여기에없는 패턴은 무엇입니까?

+0

Make의 버전은 무엇입니까? – Beta

+0

@Beta GNU Make 3.81 – gcb

답변

2

"할 방법"은 일회성 검사를 별도의 대상 자체로 만들고 해당 검사가 실행 된 후에 만 ​​실행하려는 대상의 전제 조건으로 나열하는 것입니다.

입니다
TESTS:=$(wildcard *.test) 
TEST_TARGETS=$(patsubst %,run_%,$(TESTS)) 
.PHONY: test 

test: $(TEST_TARGETS) 

run_%: check_php_unit 
     @echo Running test $(*) 

check_php_unit: 
     @echo Checking for php unit 

는, 테스트 세트가 다음 그 목표는 check_php_unit 대상에 따라 만드는 것이 실행 각 테스트 파일의 더미 대상을 : 다음은 GNU 메이크와 함께 할 수있는 하나의 방법입니다. check_php_unit에 대한 명령은 원하는 모든 유효성 검증을 수행 한 다음 경고를 인쇄하거나 오류 코드로 종료하고 make run이 종료되도록 또는 원하는대로 할 수 있습니다.

+0

내가 과용이라고 생각합니다. 두 번째 파일이 없으면 make는 첫 번째 파일을 실행 한 후 다시 실패합니다. 그 모든 것을 할 필요가 없었습니다. 하지만 더 나은 구문을 주셔서 감사합니다. 그걸 바탕으로 조금 개선되었습니다. – gcb

1

나는 다음 메이크

했을
.PHONY: check 
check: 
    @[ -f `which cmake` ] || $(error Install cmake first) 

.PHONY: check2  
check2: 
    @[ -f `which cmake` ] || echo "Install cmake first" 

.PHONY: exec 
exec: check 
    @echo "Compiling executable ..." 
    @[ -d ./build ] || mkdir ./build 
    @cd ./build; cmake ../src; make 

대상 CHECK2 작품 (cmake가있는 경우 그렇지 않은 경우, 내가 메시지 "처음 cmake 설치"를 얻을하지 않습니다 내가를 얻을 수 있지만 메시지), 대상 확인 항상 cmake가있을 때 종료합니다.

대상 대상 의 경우을 사용할 수 없습니다. 나는 타겟 check2을 사용해야하고 물론 은 cmake를 찾지 못하기 때문에 종료한다.

을 "컴파일 가능한 실행 파일 ..."이 표시되기 전에 종료하도록하십시오.