makefile에 옵션 전달

makefile에 옵션 전달

파일 생성

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_testif 를 지정 하는 것입니다 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

관련 정보