![선택적으로 번역 단위 makefile 컴파일](https://linux55.com/image/206184/%EC%84%A0%ED%83%9D%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EB%B2%88%EC%97%AD%20%EB%8B%A8%EC%9C%84%20makefile%20%EC%BB%B4%ED%8C%8C%EC%9D%BC.png)
저는 c로 프로그램을 작성 중이고 사용자가 원하는지 여부에 따라 선택적으로 번역 단위를 컴파일하고 싶습니다. 기본적으로 나는 항상 컴파일해야 하는 main.c라는 두 개의 파일을 가지고 있습니다. 또한 파일이 있는데 "선택적.c"라고 부르겠습니다. option.c의 일부 기능은 main.c의 기능보다 훨씬 빠르지만 오류가 발생하기 쉽습니다.
내 main.c에서 다음 코드를 작성할 수 있습니다.
#ifdef USE_OPTIONAL
some function call from optional.c
#else
some function call from main.c
#endif
내 메이크파일에서는 option.c를 사용해야 하는 경우에만 컴파일하고 싶습니다.
gcc -c optional.c
gcc -c -DUSE_OPTIONAL main.c
gcc main.o optional.o
그렇지 않다면 그냥
gcc -c main.c
gcc main.o
여기에는 "all:"이라는 규칙과 "선택 사항:"이라는 두 가지 규칙이 있지만 저는 "make option" 대신 "make"를 입력하는 것을 선호합니다. 이것을 달성하는 가장 쉬운 방법은 무엇입니까? 스크립트와 Makefile.in을 구성해야 합니까, 아니면 두 번째 규칙을 사용하는 것이 더 낫습니까? 예를 들어 "make USE_OPTIONAL=1"을 구현한 다음 USE_OPTIONAL 변수의 입력을 읽고 무엇을 해야 할지 알아내도록 하는 것이 가능합니까?
답변1
적어도 GNU Make를 사용하는 경우 Makefile의 C 전처리기 지시문과 유사한 접근 방식을 사용할 수 있습니다.
ifdef USE_OPTIONAL
main.o: CPPFLAGS += -DUSE_OPTIONAL
program: main.o optional.o
else
program: main.o
endif
이 작업이 완료되면 호출 USE_OPTIONAL
에 지정된 모든 값은 make
선택적 기능을 포함하게 됩니다.
보다 구체적인 테스트를 원할 경우 다음을 사용할 수 있습니다.
ifeq ($(USE_OPTIONAL), 1)
줄 대신 ifdef
. 그렇다면 전문적인 것이 필요합니다 make USE_OPTIONAL=1
.