set( ) # 설정
unset( ) # 해제
1-1. CMake에서 Variable Scope
1-2. function() 에서 Variable Scope
set()
, unset()
명령으로 변수를 설정하면, function 안쪽과 거기서 호출된 명령에서만 유효1-3. directory Variable Scope
cmake -P
로 처리하면, 하나의 디렉토리 스코프를 바인딩set()
, unset()
명령으로 변수를 설정하면 현재 디렉토리 스코프에 변수를 바인딩CMAKE_
로 시작하는 스트링 (대, 소, 대소 혼합)_CMAKE_
로 시작하는 스트링 (대, 소, 대소 혼합)_any_cmake_command
로 시작하는 스트링set()
과 unset()
의 CACHE
옵션으로 명시적 요청으로만 변경된다.""
으로 처리$CACHE{VAR}
구문으로 캐시 변수에서 직접 찾을 수 있음CMake
가 제공하는 다수의 변수와 프로젝트 코드에서 설정하는 변수를 기술한다.항상 사용 가능
break
cmake_host_system_information
cmake_language
cmake_parse_arguments
cmake_path
cmake_policy
continue
else
elseif
endfunction
endif
endmacro
execute_process
file
find_file
find_package
find_path
find_program
function
get_cmake_property
get_directory_property
get_property
if
include
list
macro
mark_as_advanced
message
option
return
set
set_directory_properties
set_property
string
unset
variable_watch
CMake 프로젝트 코드에서 사용
add_compile_definitions
add_compile_options
add_custom_command
add_definitions
add_Dependencies
add_executable
add_link_options
add_subdirectory
add_test
build_command
create_test_sourcelist
define_property
enable_testing
export
fltk_wrap_ui
get_target_property
get_test_property
include_directories
include_regular_expression
install
link_directories
load_cache
project
remove_definitions
set_target_properties
set_tests_properties
source_group
target_compile_features
target_compile_options
target_include_directories
target_link_libraries
target_link_options
target_precompile_headers
try_compile
try_run
CTest 스크립트에서 사용
ctest_build
ctest_configure
ctest_coverage
ctest_memcheck
ctest_read_custom_files
ctest_run_script
ctest_start
ctest_submit
ctest_test
ctest_upload
이전 버전 코드에서만 호환성을 위해 사용하고, 새 코드에서는 사용하지 말 것
build_name
exec_program
export_library_dependencies
install_programs
install_targets
load_command
output_required_files
qt_wrap_cpp
qt_wrap_ui
subdir_depends
subdirs
use_mangled_mesa
variable_requires
write_file
Utility 모듈을 사용하려면 include()
명령으로 로드
AndroidTestUtilities
BundleUtilities
CheckCCompilerFlag
ChekcCSourceCompiles
CheckCSourceRuns
CheckCXXCompilerFlag
CheckCXXSourceRuns
CheckCXXSymbolExists
CheckFortranCompilerFlags
CheckFortranSourceCompiles
CheckFortranSourceRuns
CheckFunctionExists
CheckIncludeFile
CheckIncludeFiles
CheckIPOSupported
CheckLibraryExists
CheckLinkerFlag
CheckOBJCompilerFlag
CheckOBJSourceRuns
CheckOBJCXXCompilerFlag
CheckOBJCXXSourceCompiles
CheckPIESupported
CheckPrototypeDefinition
CheckSourceCompiles
CheckStructHasMember
CheckSymbolExists
CheckTypeSize
CMakeAddFortranSubdirectory
CMakeBackwardCompatibilityCXX
CMakeDependentOption
CMakeFindFrameworks
CMakeFindPackageMode
CMakeGraphVizOptions
CMakePrintHelpers
CMakePrintSystemInformation
CMakePushCheckState
CPack
CPackComponent
CPackIFW
CSharpUtilities
CTest
CTestCoverageCollectGCOV
CTestUseLaunchers
Dart
DeployQt4
ExternalProject
FeatureSummary
FetchContent
FindPackageManager
FortranCInterface
GenerateExportHeader
GNUInstallDirs
GoogleTest
InstallRequiredSystemLibraries
SelectLibraryConfigurations
SquishTestScript
TestBigEndian
TestForANSIStreamHeaders
TestForSSTREAM
TestForSTDNamespace
UseJava
UseSWIG
UsewxWidgets
Find 모듈은 외부 항목을 찾는데 사용하며 보통 find_package()
명령을 통해서 호출된다.
뭐 이런 것 까지 다 필요해? 라겠지만.. Full automated 배포를 위해서..
FindALSA
FindArmadillo
FindASPELL
FindAVIFile
FindBacktrace
FindBISON
FindBLAS
FindBoost
FindBullet
FindBZip2
FindCABLE
FindCoin3D
FindCUDAToolkit
FindCups
FindCURL
FindCurses
FindCVS
FindCxxTest
FindCygwin
FindDart
FindDCMTK
FindDevIL
FindDoxygen
FindEnvModules
FindEXPAT
FindFLEX
FindFLTK
FindFLTK2
FindFontconfig
FindFreetype
FindGCCXML
FindGDAL
FindGettext
FindGIF
FindGit
FindGLEW
FindGLUT
FindGnuplot
FindGnuTLS
FindGSL
FindGTest
FindGTK
FindGTK2
FindHDF5
FindHg
FindHSPELL
FindHTMLHelp
FindIce
FindIconv
FindIcotool
FindICU
FindImageMagick
FindIntl
FindITK
FindJasper
FindJava
FindJNI
FindJPEG
FindKDE3
FindKDE4
FindLAPACK
FindLATEX
FindLibArchive
FindLibinput
FindLibLZMA
FindLibXml2
FindLibXslt
FindLTTngUST
FindLua
FindLua50
FindLua51
FindMatlab
FindMFC
FindMotif
FindMPEG
FindMPEG2
FindMPI
FindODBC
FindOpenACC
FindOpenAL
FindOpenCL
FindOpenGL
FindOpenMP
FindOpenSceneGraph
FindOpenSSL
FindOpenThreads
Findosg
Findosg_functions
FindosgAnimation
FindosgDB
FindosgFX
FindosgGA
FindosgIntrospection
FindosgManipulator
FindosgParticle
FindosgPresentation
FindosgProducer
FindosgQt
FindosgShadow
FindosgSim
FindosgTerrain
FindosgText
FindosgUtil
FindosgViewer
FindosgVolume
FindosgWidget
FindPatch
FindPerl
FindPerlLibs
FindPHP4
FindPhysFS
FindPike
FindPkgConfig
FindPNG
FindPostgreSQL
FindProducer
FindProtobuf
FindPython
FindPython2
FindPython3
FindQt3
FindQt4
FindQuickTime
FindRTI
FindRuby
FindSDL
FindSDL_image
FindSDL_mixer
FindSDL_net
FindSDL_sound
FindSDL_ttf
FindSelfPackers
FindSquish
FindSQLite3
FindSubversion
FindSWIG
FindTCL
FindTclsh
FindTclStub
FindThreads
FindTIFF
FindUnixCommands
FindVTK
FindVulkan
FindWget
FindWish
FindwxWidgets
FindX11
FindXalanC
FindXCTest
FindXercesC
FindXMLRPC
FindZLIB
Build Specification
은 현재 target 빌드에 적용하는 속성Usage Requirements
의 COMPILE_OPTIONS
나 COMPILE_DEFINITIONS
의 특정 항목은 전파되지 않음Usage Requirements
사용에 대한 주의할 점은 재배치 가능 패키지 작성을 참조한다.target
의 Build Specification과 Usage Requirements를 설정하는 명령상속 속성에 따라 다음과 같은 target 속성에 추가한다.
cmake command | PUBLIC | PRIVATE | INTERFACE |
---|---|---|---|
target_include_directories() | INCLUDE_DIRECTORIES INTERFACE_INCLUDE_DIRECTORIES | INCLUDE_DIRECTORIES | INTERFACE_INCLUDE_DIRECTORIES |
target_compile_definitions() | COMPILE_DEFINITIONS INTERFACE_COMPILE_DEFINITIONS | COMPILE_DEFINITIONS | INTERFACE_COMPILE_DEFINITIONS |
target_compile_options() | COMPILE_OPTIONS INTERFACE_COMPILE_OPTIONS | COMPILE_OPTIONS | INTERFACE_COMPILE_OPTIONS |
target_compile_definitions(archive PRIVATE BUILDING_WITH_LZMA INTERFACE USING_ARCHIVE_LIB)
Usage Requirements
의 전파target
의 Usage Requirements
는 '종속' 항목에 전파될 수 있다.target_link_libraries()
명령에는 전파 범위를 제어하는 message()
message( [<Type>] <message> )
Makefile 생성 과정 中, message를 콘솔에 출력한다.
Type은 생략할 수 있고, 생략시 그냥 콘솔에 메시지를 출력한다.
message
는 variable 도 들어갈 수 있다.
Type | Description |
---|---|
STATUS | 상태 메시지 출력 '--' 가 추가되어 메시지 출력 |
WARNING | 경고 메시지 출력하고, 계속 진행 |
AUTHOR_WARNING | 프로젝트 개발자용 경고 메시지를 출력하고, 계속 진행 |
SEND_ERROR | 오류 메시지를 출력하고 계속 진행하지만 Makefile 생성 안함 |
FATAL_ERROR | 오류 메시지를 출력하고, 작업을 즉시 중단 |
message(FATAL_ERROR "Fatal error occurred!")
위 명령은 FATAL_ERROR로 Makefile 작성을 즉시 중단한다.
add_custom_command()
add_custom_command(TARGET ${MY_LIBRARY_NAME} POST_BUILD COMMAND echo Hello world! USES_TERMINAL)
Makefile
생성 후, Makefile로 빌드할 때 메시지를 출력한다.COMMAND echo
를 사용하는 방식PUBLIC
속성 | 설명 |
---|---|
PUBLIC | 설정한 경로는 - INCLUDE_DIRECTORIES - INTERFACE_INCLUDE_DIRECTORIES 에 추가된다. |
PRIVATE | 설정한 경로는 - INCLUDE_DIRECTORIES 에 추가 |
INTERFACE | 설정한 경로는 - INTERFACE_INCLUDE_DIRECTORIES 에 추가된다.현재 target에서는 사용되지 않고, 현재 target에 의존한 target에 사용된다. |
target_include_directories()
target_link_libraries()
include
추가target_include_directories()
target_include_directories(<target> [SYSTEM] [BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
INCLUDE_DIRECTORIES
: 현재 target에만 사용INTERFACE_INCLUDE_DIRECTORIES
: 현재 target + 종속된 다른 대상의 INCLUDE_DIRECTORIES에 추가target_include_directories()
는 PUBLIC | PRIVATE | INTERFACE
키워드에 따라 지정한 경로를 INCLUDE_DIRECTORIES
나INTERFACE_INCLUDE_DIRECTORIES
에 추가한다.target_link_libraries()
target_link_libraries(<target> <PUBLIC | PRIVATE | INTERFACE > <item>)
<item>
)을 추가한다.libpthread.so
를 링크할 때 -lpthread
와 같다고 생각하면 됨<item>
은 동일한 프로젝트에서 빌드된 경우 <item>
의 INTERFACE_INCLUDE_DIRECTORIES
를 <target>
의 INCLUDE_DIRECTORIES
에 추가한다.