파일 생성
my_test:
ifdef $(toto)
@echo 'toto is defined'
else
@echo 'no toto around'
endif
예상되는 동작
$ make my_test
no toto around
$ make my_test toto
toto is defined
현재 행동
$ make my_test
no toto around
$ make my_test toto
no toto around
make: *** No rule to make target `toto'. Stop.
실행하면 make my_test
예상대로 else 텍스트가 표시됩니다 no toto around
. 하지만
make my_test toto
no toto around
make: *** No rule to make target `toto'. Stop.
파일 버전 생성
$ make -v
GNU Make 3.81
SLE 버전
$ cat /etc/*release
VERSION_ID="11.4"
PRETTY_NAME="SUSE Linux Enterprise Server 11 SP4"
폴리스티렌
요점은 make my_test
if 를 지정 하는 것입니다 toto
. toto
지정되지 않으면 명령이 자동으로 실행됩니다.
답변1
toto 주변의 달러를 제거하고 다른 방식으로 명령줄에서 toto를 전달해야 합니다.
명령줄
make toto=1 my_test
파일 생성
my_test:
ifdef toto
@echo 'toto is defined'
else
@echo 'no toto around'
endif
답변2
이러한 Makefile 콘텐츠를 사용할 수 있습니다. 비결은 다음과 같습니다.filter
기능:
my_test:
ifeq (toto, $(filter toto,$(MAKECMDGOALS)))
@echo 'toto is defined'
else
@echo 'no toto around'
endif
@echo run command $(if $(filter toto,$(MAKECMDGOALS)),--verbose,--normally)
%:
@:
결과:
$ make my_test
no toto around
run command --normally
$ make my_test toto
toto is defined
run command --verbose
$ make toto my_test
toto is defined
run command --verbose
$ make my_test totofofo
no toto around
run command --normally
답변3
Makefile은 트릭이 될 수 있습니다. 일반적으로 저는 다음과 같은 작업을 수행합니다.
# turn them into do-nothing targets
$(eval toto:;@:)
my_test:
ifeq (toto, $(filter toto,$(MAKECMDGOALS)))
@echo 'toto is defined'
else
@echo 'no toto around'
endif