programing

# ifdef DEBUG (플랫폼에 의존하지 않는 CMake 사용)

itsource 2022. 8. 3. 00:02
반응형

# ifdef DEBUG (플랫폼에 의존하지 않는 CMake 사용)

Windows(Visual Studio) 및 Linux 머신(gcc)에서 프로젝트를 빌드할 때 CMake를 사용하고 있습니다.일부 코드를 "디버깅 전용"으로 표시하려고 합니다.

#ifdef DEBUG
//some logging here
#endif

문제는 CMake "Debug" 빌드 유형의 모든 플랫폼에서 사용할 수 있는 컴파일러 정의는 무엇입니까?DEBUG가 존재하지 않는 것 같습니다.(빌드 타입이 Debug일 경우에만 로깅 또는 기타 기능을 사용할 수 있습니다.

CMake 추가-DNDEBUGCMAKE_C_에 접속합니다.기본적으로 FLAGS_{RELEASE, MINSIZEREL}입니다.그래서, 당신은#ifndef NDEBUG.

나는 당신이 당신 자신의 정의를 추가할 것을 제안합니다.CMake기호.CMAKE_C_FLAGS_DEBUG에는 디버깅모드에서만 사용되는 플래그를 포함할 수 있습니다.예를 들어 다음과 같습니다.

C:

set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DMY_DEBUG")

C++:

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DMY_DEBUG")

코드에 다음과 같이 쓸 수 있습니다.

#ifdef MY_DEBUG
// ...
#endif

(아마도, 당신은 다음을 사용해야 할 것입니다."/DMY_DEBUG"(Visual Studio).

CMake > = 2.8에서는 다음을 사용합니다.

target_compile_definitions(MyTarget PUBLIC "$<$<CONFIG:DEBUG>:DEBUG>")

디버깅 모드에서 컴파일할 경우 코드에서 사용할 DEBUG 기호를 정의합니다.Visual Studio나 Xcode와 같은 IDE에서도 cmake가 모든 컴파일 모드에서 단일 파일을 생성합니다.

각 대상 [1]에 대해 이 작업을 수행해야 합니다.또는 (Cmake > = 3.0)을 사용할 수 있습니다.

add_compile_options("$<$<CONFIG:DEBUG>:-DDEBUG>")

최신 버전의 Visual C++(최소한 VS2015 이후)는 파라미터에 / 또는 - 중 하나를 허용하므로 컴파일러 전체에서 정상적으로 작동합니다.이 명령어는 추가할 수 있는 다른 컴파일 옵션(MSVC의 경우 릴리스 모드의 경우 "/O2" 또는 G++/Clang의 경우 릴리스 모드의 경우 "-O3")에도 유용합니다.

[1] : 참고: CMake > = 3.12(현재 베타)에는 또한add_compile_definitions모든 대상에 영향을 주는 제너레이터 식을 지원합니다.

언급URL : https://stackoverflow.com/questions/8591762/ifdef-debug-with-cmake-independent-from-platform

반응형