GCC 컴파일 프로젝트에서
- 각 대상 유형 (디버그 / 릴리스)에 대해 CMake를 어떻게 실행합니까?
- CMake를 사용하여 디버그 및 릴리스 C / C ++ 플래그를 어떻게 지정합니까?
- 주 실행 파일이 컴파일
g++
되고 중첩 라이브러리가 하나 있음을 어떻게 표현gcc
합니까?
GCC 컴파일 프로젝트에서
g++
되고 중첩 라이브러리가 하나 있음을 어떻게 표현 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
빌드 구성.
다음 과 같이 변수 와 변수를 추가 할 수 있는 툴체인 파일 을 지정하여 플래그를 수정 / 추가 할 수 있습니다 .CMAKE_C_FLAGS_DEBUG
CMAKE_C_FLAGS_RELEASE
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall")
자세한 내용은 CMAKE_BUILD_TYPE 을 참조하십시오.
세 번째 질문은 정확히 무엇을 요구하는지 잘 모르겠습니다. CMake는 다른 소스 파일에 적합한 컴파일러를 자동으로 감지하고 사용해야합니다.
-i
옵션을 사용하면 다음과 같은 오류 메시지가 나타납니다 The "cmake -i" wizard mode is no longer supported.
. 저는 cmake 3.7.1을 사용하고 있습니다
CMAKE_BUILD_TYPE
설정되지 않은 경우 cmake는 기본 빌드 유형을 선택하지 않으므로 생성 된 컴파일러 명령 행이 빌드 구성과 일치하지 않습니다.
디버그 / 릴리스 플래그에 대해서는 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")
btw를 사용하여 더 잘 수행 할 수 있음 ) 다음을 사용할 수 있습니다 add_compiler_options
.
add_compile_options(
"-Wall" "-Wpedantic" "-Wextra" "-fexceptions"
"$<$<CONFIG:DEBUG>:-O0;-g3;-ggdb>"
)
이렇게하면 지정된 경고가 모든 빌드 유형에 추가되지만 지정된 디버깅 플래그 만 DEBUG
빌드에 추가됩니다. 컴파일 옵션은 CMake 목록으로 저장되는데, 이는 세미콜론으로 요소를 구분하는 문자열 일뿐 ;
입니다.
list(APPEND CMAKE_CXX_FLAGS_DEBUG "-g3")
-g3 명령과 반드시 실패합니다 새 명령 -g3 시작을 종료하기 전에 세미콜론을 추가?
CMAKE_CXX_FLAGS
입니다 하지 cmake리스트 만 공백으로 구분 된 명령 행 플래그의 문자열입니다. 나는 ... 그 행동의 일관성을 찾을
cmake --build {$PWD} --config <cfg>
다중 구성 도구의 경우 다음 을 실행할 수도있는 경우 재생성하지 않고 다른 구성을 구축하려면 <cfg>
ex를 선택하십시오 . 디버그, 릴리스, MinSizeRel, RelWithDebInfo
https://cmake.org/cmake/help/v2.8.11/cmake.html#opt%3a--builddir
--config
아무런 결과없이 옵션을 가지고 놀려고했습니다. $<CONFIG>
변수는 영향을 미치지 -DCMAKE_BUILD_TYPE=
않습니다.
// CMakeLists.txt : 출시
set(CMAKE_CONFIGURATION_TYPES "Release" CACHE STRING "" FORCE)
// CMakeLists.txt : 디버그
set(CMAKE_CONFIGURATION_TYPES "Debug" CACHE STRING "" FORCE)
CMAKE_CONFIGURATION_TYPES
에 따라 가능한 값이 포함되어 있기 때문일 수 있습니다 CMAKE_BUILD_TYPE
. 따라서 다른 답변에서 제안한대로 후자를 설정해야합니다. 어쩌면 귀하의 솔루션은 가능한 선택을 원하는 것으로 제한하기 때문에 효과가있을 수 있습니다.
cmake -i ..
cmake가 대화 형으로 실행됩니다, 그래서 당신이 원하는 빌드의 유형을 묻는 대신 (없음, 릴리스, 디버그, MinSizeRel, RelWithDebInfo).