CMake에서의 디버깅과 릴리스
GCC 컴파일 프로젝트에서는
- 타깃 유형(디버깅/릴리스)별로 CMake를 실행하려면 어떻게 해야 합니까?
- CMake를 사용하여 C/C++ 플래그를 디버깅 및 릴리스하려면 어떻게 해야 합니까?
- 주요 실행 파일이 컴파일되는 것을 어떻게 표현해야 합니까?
g++1개의 네스트 라이브러리가 있습니다.gcc?
CMake에서는 일반적으로 "소스 외" 빌드를 수행하는 것이 좋습니다.작성하다CMakeLists.txt네 프로젝트의 뿌리에.다음으로 프로젝트의 근원부터 설명하겠습니다.
mkdir Release
cd Release
cmake -DCMAKE_BUILD_TYPE=Release ..
make
그리고...Debug(프로젝트의 근원으로부터):
mkdir Debug
cd Debug
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
Release/Debug는 컴파일러에 적절한 플래그를 추가합니다.또 있다RelWithDebInfo그리고.MinSizeRel구성을 구축합니다.
다음과 같이 변수를 추가할 수 있는 도구 체인 파일을 지정하여 플래그를 수정/추가할 수 있습니다.
set(CMAKE_CXX_FLAGS_DEBUG_INIT "-Wall")
set(CMAKE_CXX_FLAGS_RELEASE_INIT "-Wall")
자세한 내용은 CMAKE_BUILD_TYPE을 참조하십시오.
세 번째 질문입니다만, 무엇을 묻고 계신지 잘 모르겠습니다.CMake는 다른 소스 파일에 적합한 컴파일러를 자동으로 검출하여 사용합니다.
여기 답변의 대부분은 최신이 아니거나 잘못되어 있습니다.그래서 더 잘 대답할 수 있도록 노력하겠습니다.물론 2020년에는 이 질문에 대답할 것이기 때문에 상황이 바뀔 것으로 예상됩니다.
타깃 유형(디버깅/릴리스)별로 CMake를 실행하려면 어떻게 해야 합니까?
우선 디버깅/릴리즈는 cmake(니트픽) 단위의 설정이라고 불립니다.
단일 구성 생성기(Ninja/Unix-Makefiles)를 사용하는 경우
그런 다음 구성별로 빌드 폴더가 필요합니다.
다음과 같이 합니다.
# Configure the build
cmake -S . -B build/Debug -D CMAKE_BUILD_TYPE=Release
# Actually build the binaries
cmake --build build/Debug
멀티 구성 제너레이터의 경우 약간 다릅니다(Ninja Multi-Config, Visual Studio).
# Configure the build
cmake -S . -B build
# Actually build the binaries
cmake --build build --config Debug
이것이 왜 필요한지 궁금하다면 cmake는 빌드 시스템이 아니기 때문입니다.메타 빌드 시스템(구축 시스템을 구축하는 빌드 시스템)입니다.이는 기본적으로 하나의 빌드로 여러 구성을 지원하는 빌드 시스템을 처리한 결과입니다.좀 더 깊이 이해하고 싶다면 크레이그 스콧의 책 "Professional CMake: A Practical Guide"에서 CMake에 대해 조금 읽어볼 것을 제안합니다.
CMake를 사용하여 C/C++ 플래그를 디버깅 및 릴리스하려면 어떻게 해야 합니까?
현대의 관습은 목표물과 속성을 사용하는 것이다.
다음은 예를 제시하겠습니다.
add_library(foobar)
# Add this compile definition for debug builds, this same logic works for
# target_compile_options, target_link_options, etc.
target_compile_definitions(foobar PRIVATE
$<$<CONFIG:Debug>:
FOOBAR_DEBUG=1
>
)
메모: 제너레이터 식을 사용하여 구성을 지정하는 방법!CMAKE_BUILD_TYPE을 사용하면 다중 구성 생성기에 잘못된 빌드가 발생합니다.
게다가 경우에 따라서는, 1개의 타겟만을 대상으로 하는 것이 아니라, 글로벌하게 설정할 필요가 있습니다.add_compile_definitions, add_compile_options 등을 사용합니다.이러한 함수는 제너레이터 식을 지원합니다.꼭 해야 할 때가 아니면 구식 크메이크를 사용하지 마라(그 길은 악몽의 땅이다).
메인 실행 파일이 g++로 컴파일되고 하나의 네스트 라이브러리가 gcc로 컴파일된다는 것을 어떻게 표현해야 합니까?
당신의 마지막 질문은 정말 말이 안 돼요.
디버깅 플래그에 는, 「」/「」를 .CMAKE_BUILD_TYPE변수로서 합니다)cmake -DCMAKE_BUILD_TYPE=value와 같은 값을 합니다.Release,Debug 등등.
https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/Useful-Variables#compilers-and-tools
cmake는 확장자를 사용하여 컴파일러를 선택하므로 파일 이름을 .c로 지정합니다.
이것은, 다양한 설정으로 덮어쓸 수 있습니다.
예를 들어 다음과 같습니다.
set_source_files_properties(yourfile.c LANGUAGE CXX)
g++로 .c 파일을 컴파일합니다.위 링크에서는 C/C++용 컴파일러를 선택하는 방법도 보여 줍니다.
, 「」를 조작합니다.CMAKE_CXX_FLAGS 스트링더 잘 할수 것)string(APPEND CMAKE_CXX_FLAGS_DEBUG " -g3")를하면 됩니다.add_compile_options:
add_compile_options(
"-Wall" "-Wpedantic" "-Wextra" "-fexceptions"
"$<$<CONFIG:DEBUG>:-O0;-g3;-ggdb>"
)
빌드유형에만 "Debugging Flags" 에 됩니다.DEBUG목록으로 저장됩니다.입니다.;.
하고 있는 , 않고 다른 는, 「」를 실행할 .cmake --build {$PWD} --config <cfg>도구의 경우 [Da's ]를합니다.<cfg> Debug, MinSizeRel,: ", ", MinSizeRel, RelWithDebInfo"
https://cmake.org/cmake/help/v2.8.11/cmake.html#opt%3a--builddir
// CMake Lists.txt : 릴리즈
set(CMAKE_CONFIGURATION_TYPES "Release" CACHE STRING "" FORCE)
// CMake Lists.txt : 디버깅
set(CMAKE_CONFIGURATION_TYPES "Debug" CACHE STRING "" FORCE)
언급URL : https://stackoverflow.com/questions/7724569/debug-vs-release-in-cmake
'source' 카테고리의 다른 글
| 왜 sin_addr이 구조체 내부에 in_addr이 있습니까? (0) | 2022.08.14 |
|---|---|
| Java: System.console()에서 입력을 받는 방법 (0) | 2022.08.14 |
| Vue.js를 사용하여 단일 파일 구성 요소의 메서드에서 계산된 속성에 액세스하는 방법 (0) | 2022.08.14 |
| /proc/ 파일을 해석해도 안전한가요? (0) | 2022.08.14 |
| C 어레이를 반복합니다. (0) | 2022.08.14 |