프로그램 하나로 필요에 따라 여러 버전의 실행 파일을 만들어야 한다면 어떤 방법을 사용하시나요? 보통 헤더 파일을 이용합니다. 모든 모듈이 include 하는 헤더 파일에 #define 문을 추가하는 것이죠. 저 같은 경우 모든 프로젝트에 project_inc.h 라는 헤더 파일을 꼭 만들어 사용합니다. project_inc.h에 아래와 같이 define 을 사용했다고 하겠습니다.

#define USE_UART

 

이후에는 조건 컴파일을 위한 전처리기를 사용하면 됩니다.

poll_obj_t *obj;

#ifdef USE_UART

    obj = uart_open( dev_name, 115200, 'n');

#else

    obj = tcp_server_open();
    
#endif

 

그러나 이렇게 헤더 파일을 이용하는 방법은 틀린 것은 아니지만, 그리고 많이 사용하는 방법이지만, 권하고 싶지는 않습니다. 대신에 컴파일러 옵션을 이용할 것을 권합니다. 사용하는 방법도 쉽습니다. 컴파일 옵션에 -D를 추가하기만 하면 됩니다.

$(CC) $(LDFLAGS) $(OBJS) -o $@ $(LIBS) -DUSE_UART

컴파일 옵션을 이용하면 Makefile에서 조건문과 조합하여 더욱 다양한 버전을 생성할 수 있습니다. 예를 들어 타겟에 따라서 컴파일러와 define 문을 조합할 수 있습니다.

APP_TYPE		= win32

                  :
                   

CFLAGS			= -o -W -Wall -O2

ifeq ($(APP_TYPE),win32)
    CC	= vcc
	CFLAGS			+= -DMS_WIN32
	LIBS		    += -lwsock32
else
    CC	= gcc
endif

                  :

다양한 버전을 생성할 때 컴파일 옵션을 사용해 보세요.