π‘ λ³Έ λ¬Έμλ 'CMake λ³μκ°μ μμ€μ½λμμ μ¬μ©νλ λ°©λ²'μ λν΄ μ 리ν΄λμ κΈμ λλ€.
configure_fileμ ν΅ν΄ CMake λ³μκ°μ μμ€μ½λμμ μ¬μ©νλ λ°©λ²μ λν΄ μ 리νμμΌλ μ°Έκ³ νμκΈ° λ°λλλ€.
1. νλ‘μ νΈ κ΅¬μ±
1.1 CMakeLists.txt νμΌ: configure_file μ¬μ©
CMakeLists.txtμμ μ€μ ν λ³μκ°μ μμ€νμΌμμλ μ¬μ©νκΈ° μν configure_file ν¨μλ₯Ό μ¬μ©νλ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€!
μ°¨κ·Όμ°¨κ·Ό CMakeLists.txtμ μ μ΄λ κ² μμ±νλμ§, μμ€μ λν΄ μ€λͺ
ν΄λλ¦¬κ² μ΅λλ€.
...
option(USING_NLOHMANNJSON "using nlohmann_json" ON)
option(USING_LEVELDB "using leveldb" ON)
# configure a header file to pass some of the CMake settings to the source code
configure_file(config.h.cmake ${PROJECT_BINARY_DIR}/include/config.h)
add_library(${PROJECT_NAME})
target_include_directories(${PROJECT_NAME}
PUBLIC
${PROJECT_BINARY_DIR}/include
...
)
...
+ configure_file()
configure_file λͺ λ Ήμ΄λ μ΄λ ν νμΌμ λ€λ₯Έ μμΉμ 볡μ¬νκ±°λ CMake λ³μκ°λ€μ νμΌμ μΈ μ μλλ‘ ν μ μμ΅λλ€.
# configure a header file to pass some of the CMake settings
# to the source code
configure_file(config.h.cmake ${PROJECT_BINARY_DIR}/include/config.h)
- 첫 λ²μ§Έ argumentλ μμ€κ° λλ νμΌμ΄λ©°,
- λ λ²μ§Έ argumentλ κ²°κ³Όλ¬Όμ νμΌλͺ
μ
λλ€.
(μ λκ²½λ‘κ° μλ νμΌλͺ λ§ μ λ ₯νλ©΄, νμ¬ CMakeLists.txtκ° μ‘΄μ¬νλ κ²½λ‘λ₯Ό κΈ°μ€μΌλ‘ μλκ²½λ‘λ‘ μΈμνκ² λ©λλ€.)
1.2 config.h.cmake λλ config.h.in νμΌ λ§λ€κΈ°
μμ±ν ν€λνμΌμ ν¬λ§·μ΄ λλ νμΌμΈ config.h.cmakeμ΄λ config.h.inλ₯Ό μ μν΄μ£Όμ΄μΌ ν©λλ€. μ°Έκ³ λ‘, λ νμΌμ νμ₯μλ§ λ€λ₯Ό λΏ λμΌν μμ€λ‘ ꡬμ±λμ΄ μμ΅λλ€!
// the configured options and settings for Tutorial
#define VERSION_MAJOR @VERSION_MAJOR@
#define VERSION_MINOR @VERSION_MINOR@
- defineμ ν΅ν΄μ Tutorial_VERSION_MAJORμ Tutorial_VERSION_MINORλ₯Ό μ μν΄μ£Όλλ° μ΄ κ°μ CMakeμμ μ μλ λ²μ λ³μλͺ μΌλ‘ μ κ·Όνκ³ μμ΅λλ€.
- CMake λ³μμ μ κ·ΌνκΈ° μν΄μ λ³μλͺ
μ μ λμ '@'λ‘ κ°μΈμ£Όλ©΄ λλλ°, '@'λ‘ κ°μΈμ£Όκ² λλ©΄ configure_fileμ ν΅ν΄μ νμΌμ΄ copyλ λ, ν΄λΉ λ³μμ κ°μΌλ‘ λ체λκ² λ©λλ€.
- λ°λΌμ, CMake λ΄μμ optionμ΄λ setμΌλ‘ λ³μλ₯Ό μ μν νμ configure_file λͺ λ Ήμ΄λ₯Ό ν΅ν΄ μ€μ νμΌμ μμ±ν΄μΌ μμ±λ νμΌμ λ°μλ©λλ€!
- option(USING_NLOHMANNJSON "using nlohmann_json" ON)
option(USING_LEVELDB "using leveldb" ON)
configure_file("config.h.cmake" ${PROJECT_BINARY_DIR}/include/piclUtilCfg.h)
2. νλ‘μ νΈ λΉλ
cmake ..μΌλ‘ λΉλνμΌμ μμ±νλ©΄, ${PROJECT_BINARY_DIR}μΈ build ν΄λ λ΄ include/piclUtilCfg.hνμΌμ΄ μκΈ΄ κ²μ νμΈν μ μμ΅λλ€.
μμ±λ ν€λνμΌ μ¬μ©νκΈ°
μ΄λ κ² μμ±λ ν€λνμΌμ μ°λ¦¬κ° μμ±ν μ€ννμΌ(μ¦, μμ€μ½λ)μμ μ¬μ©νλ €λ©΄,
- add_library λͺ λ Ήμ΄λ₯Ό ν΅ν΄ λΌμ΄λΈλ¬λ¦¬λ₯Ό λ§λ€κ³ ,
- target_include_directories λͺ λ Ήμ΄λ₯Ό ν΅ν΄μ include μμΌμ£Όμ΄μΌ ν©λλ€.
add_library(${PROJECT_NAME})
target_include_directories(${PROJECT_NAME}
PUBLIC
${PROJECT_BINARY_DIR}/include
...
)
μ°Έκ³
- [Blog] Tutorial (1) - Start CMake: https://junstar92.tistory.com/204
'Study: DeveloperTools(DevTool) > DevTool: CMake' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[CMake] make package ν¨ν€μ§ (feat. cmake install) (0) | 2022.07.14 |
---|---|
[CMake] λ³μ λ° μ΄λ―Έ μ μλ 맀ν¬λ‘ κ°λ€ (0) | 2022.07.07 |
[CMake] function: λ°λ³΅λλ μμ μ ν¨μννμ! (0) | 2022.06.28 |
[CMake] ν¬λ‘μ€ νλ«νΌ λΉλ νκ²½ κ΅¬μΆ (0) | 2022.06.24 |
[CMake] FetchContent: μΈλΆ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ~ (0) | 2022.06.24 |