Coding Memo

[C#] Visual Studio 조건부 컴파일 심볼 설정 본문

etc

[C#] Visual Studio 조건부 컴파일 심볼 설정

minttea25 2023. 8. 15. 14:53

조건부 컴파일 심볼 정의는 파일의 첫줄에 해야한다.

#define WINDOWS

// ...

#if WINDOWS
//...
#else
//...
#endif

 

조건부 컴파일 심볼이 하나의 파일에만 사용되면 간단히 위의 예시처럼 하면 된다.

 

만약, 저 심볼을 하나의 파일에서가 아니라, 다수의 파일에 적용해야하는 경우가 있다.

예를 들어, 조건부 컴파일 디렉티브로 플랫폼 별 코드를 작성해 놓았는데, 이런 코드가 하나의 파일에서가 아니라 프로젝트의 다수의 파일에 각각 다 심볼이 정의가 되어있을 때가 그런 경우다. 이 경우에는 빌드를 A로 하고 싶으면 심볼이 들어가 있는 모든 파일에 '#define A'가 들어가 있는지 다 확인해야한다. 그 반대로 A가 아닌 빌드를 원한다면 '#define A'가 모두 주석 처리가 되어 있는지 확인해야 한다. 매우 불편하다.

 

따라서 Visual Studio에서는 프로젝트에서 조건부 컴파일 심볼을 설정할 수 있다.


조건부 컴파일 심볼 설정

 

1. 프로젝트 우클릭 -> 속성

 

2. 빌드 -> 조건부 컴파일 심볼

3. 자신이 원하는 심볼 (#define으로 설정하려던 심볼)을 입력 후 저장 (ctrl + s)

 

만약 여러개라면 ';' (semi-clone)을 써서 구분할 수 있다.

구성에 따라 (Debug, Release모드 등에 따라) 조건부 컴파일 기호는 각각 다르게 입력할 수 있다.

또한 여기서 심볼을 임력해 놓으면, 파일에 #define으로 미리 입력하지 않았는데도 코드 힌트에 바로 뜨게 된다.

UNITY와 MEMORY_BUFFER가 뜬 것을 알 수 있다.

#define UNITY를 하지 않았지만 프로젝트 설정의 조건부 컴파일 심볼 옵션에 UNITY를 추가해 주었기 때문에 코드가 활성화 되었다.


빌드의 조건부 컴파일 기호에 필요한 심볼을 작성해 놓으면 파일 마다 맨 앞에 심볼을 따로 define하지 않아도 적용이 된다. 물론 코드 작성할 때도 적용되고, 빌드 할때도 적용된다.

 

(실제로 파일 앞에 #define으로 정의하지 않아도 #if ~~ 아래 코드가 회색으로 비활성화 되어 있지 않고 정상적인 코드로 보인다.)