본문 바로가기

CMake17

[CMake] Target Types References Professional CMake : A Practical Guide Contents Executables Libraries Promoting Imported Targets CMake는 단순한 실행파일이나 라이브러리뿐만 아니라 다양한 타겟 타입을 지원합니다. 또한, 자체적으로 빌드되지 않고 다른 entity에 대한 레퍼런스 역할을 하는 타겟 타입을 정의할 수도 있습니다. 실제 자체 바이너리를 생성하지 않고 전이(transitive) 속성이나 의존성들을 읽는데 사용될 수도 있고, 또는 기존의 static 또는 shared 라이브러리가 아닌 단순히 object 파일들을 모아두는데 사용할 수도 있습니다. 오늘 포스팅에서는 다양한 타겟 타입들과 그 용도에 대해서 알아보겠습니다. Excutab.. 2021. 11. 14.
[CMake] Language Requirements References Professional CMake : A Practical Guide Contents Setting The Language Standard Directly Setting The Language Standard By Feature Requirements C나 C++이 계속해서 업데이트되면서 코드에서 사용하는 C/C++ 버전을 지원하려면 컴파일러 및 링커 플래그를 이해해야합니다. 컴파일러마다 다른 플래그를 사용하지만 동일한 컴파일러와 링커를 사용하는 경우에도 플래그를 사용하여 표준 라이브러리의 다른 버전을 선택할 수 있습니다. C++11에 대한 서포트가 시작한지 얼마되지 않았을 때는 CMake에서 사용할 표준을 선택하는 직접적인 지원이 없었으므로 프로젝트에서 필요한 플래그를 스스로 해결해.. 2021. 11. 9.
[CMake] Compiler and Linker 설정 References Professional CMake : A Practical Guide Contents Traget Properties Directory Properties / Command Compiler / Linker Variables 이전 게시글에서 빌드 타입과 이와 관련된 특정 컴파일러와 링커 선택에 관련하여 알아봤습니다. 2021.11.05 - [CMake] - [CMake] Build Type / Custom Build Type 이번에는 컴파일러와 링커 동작을 제어하는 기본적인 방법에 대해서 알아보겠습니다. Target Properties CMake의 속성 시스템에서 Traget 속성은 컴파일러와 링커 플래그를 제어하는 기본 메커니즘을 가지고 있습니다. 일부 속성은 임의의 플래그를 지정할 .. 2021. 11. 6.
[CMake] Build Type / Custom Build Type References Professional CMake : A Practical Guide Contents Basic Build Types Common Erros Custom Build Types 빌드 타입build type(일부 IDE tool에서는 build configuration 또는 build scheme라고 함)은 컴파일러와 링커의 동작을 고수준으로 조작합니다. 이번 글에서는 빌드 타입에 대해서 알아보고, 다음에 컴파일러와 링커 옵션을 제어하는 구체적인 내용들을 살펴보도록 하겠습니다. Basic Build Type 빌드 타입은 빌드에 대한 거의 모든 것에 영향을 미칠 가능성이 있습니다. 주로 컴파일러 및 링커 동작에 직접적인 영향을 미치지만 프로젝트에 사용되는 디렉토리 구조에도 영향을 미칩니다... 2021. 11. 5.
[CMake] Policy References Professional CMake : A Practical Guide Contents Policy cmake_minimum_required(), cmake_policy() Policy Scope CMake는 새로운 기능들을 도입하고, 버그를 수정하고 특정 기능의 동작을 변경하면서 단점이 개선해나가며 오랫동안 발전해왔습니다. 새로운 기능의 도입은 이전 CMake 프로젝트에서 문제를 일으킬 가능성이 낮지만, 기존 기능이 변경되는 경우 프로젝트에 문제가 생길 수 있습니다. 이러한 이유로 이전 버전과 호환성을 유지하고자 간단한 마이그레이션 방법을 제공합니다. 이러한 제어는 CMake의 policy mechanisms을 통해 수행됩니다. 일반적으로 policy는 개발자가 자주 사용하는 것은 아.. 2021. 11. 4.
[CMake] Modules References Professional CMake : A Practical Guide Contents Modules include() find_package() CMakePrintHelpers, TestBigEndian CheckCSourceCompiles, CheckCXXSourceCompiles, CheckFortranSourceCompiles CheckCSourceRuns, CheckCXXSourceRuns CheckCCompilerFlag, CheckCXXCompilerFlag, CheckFortranCompilerFlag CheckSymbolExists, CheckCXXSymbolExists CheckStructHasMember, CheckPrototypeDefinition, CheckTyp.. 2021. 11. 4.
[CMake] Generator Expressions References Professional CMake : A Practical Guide Contents Generator Expressions Target Details General Information CMake를 실행하면서 프로젝트의 CMakeLists.txt 파일을 읽고 프로젝트 파일들을 생성하는 것을 하나의 단일 단계로 생각할 수 있습니다. 그러나 CMakeLists.txt를 읽는 것과 빌드 파일을 생성하는 것은 전혀 다른 단계입니다. CMake가 실행되면, 먼저 소스 트리의 최상단에 존재하는 CMakeLists.txt를 읽고 처리합니다. 그리고 프로젝트의 internal representation들은 CMakeLists.txt 안의 커맨드와 함수들이 실행되면서 만들어집니다. 이 과정을 Con.. 2021. 11. 3.
[CMake] Properties References Professional CMake : A Practical Guide Contents Properties General Property Commands : set_property(), get_property(), define_property() Global Properties : get_cmake_property() Directory Properties : set_directory_properties(), get_directory_property() Target Properties : set_target_properties(), get_target_property() Properties(속성)는 소스 파일이 object 파일로 컴파일되는 방법부터 빌드된 바이너리의 install 위치까.. 2021. 11. 2.
[CMake] Functions and Macros References Professional CMake : A Practical Guide Contents Functions and Macros Argument 특징 Keyword Arguments (using cmake_parse_arguments()) Overriding functions/macros CMake의 함수와 매크로는 C/C++에서의 함수와 매크로와 매우 유사한 특성을 가지고 있습니다. 함수는 새로운 scope를 가지고 함수의 argument들은 함수 내부(body)에서 참조할 수 있는 변수가 됩니다. 반면에 매크로는 호출 지점으로 매크로 본문(body)을 복사하고, 매크로의 argument는 간단한 문자열로 대체됩니다. 이러한 동작들은 C/C++에서 함수와 #define으로 정의되는 매크로.. 2021. 11. 1.
[CMake] add_subdirectory() 와 변수 Scope Refereces Professional CMake : A Practical Guide Contents add_subdirectory() variable scope include() return() / include_guard() 이번 글에서는 대부분의 프로젝트에서 사용되는 add_subdirectory()와 이로 인해 발생하는 변수의 scope에 대해서 알아보겠습니다. 그리고 add_subdirectory()와 유사하지만 약간은 다른 include()에 대해서도 살짝 알아보도록 하겠습니다. add_subdirectory() 대부분의 프로젝트에서는 소스코드가 하나의 폴더에만 존재하는 것이 아닙니다. 그리고 하나의 Target으로 전체 코드가 빌드되는 것도 아니기 때문에 필연적으로 여러 개의 서브 디렉토리.. 2021. 10. 31.