선택적으로 번역 단위 makefile 컴파일

선택적으로 번역 단위 makefile 컴파일

저는 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.

관련 정보