This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
programming:cmake [2022/04/13 04:34] odagawa |
programming:cmake [2022/07/21 06:15] (current) odagawa |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| =====CMake===== | =====CMake===== | ||
| + | |||
| + | CMake は実行ファイル作成時の依存関係を整理し,Makefile などを作成してくれるソフトウェア.\\ | ||
| + | スクラッチで書いたことはないが,どこかから何かしらをコピペしながら覚えていくのがよいと思う.\\ | ||
| + | おそらく最小単位は以下の通り (MyApp.cpp から MyApp を作成) | ||
| + | |||
| + | < | ||
| + | cmake_minimum_required(VERSION 3.10.2) | ||
| + | add_executable(MyApp MyApp.cpp) | ||
| + | |||
| + | </ | ||
| ===ROOT=== | ===ROOT=== | ||
| - | ROOT のライブラリを CMake で見つける方法. | + | ROOT のライブラリを CMake で見つける方法.\\ |
| 以下を CMakeLists.txt に追加する. | 以下を CMakeLists.txt に追加する. | ||
| < | < | ||
| Line 9: | Line 19: | ||
| # | # | ||
| # | # | ||
| - | find_package(ROOT 6.18 CONFIG REQUIRED ${ROOT_REQIORED_COMPONENTS}) | + | find_package(ROOT 6.18 CONFIG REQUIRED ${ROOT_REQUIRED_COMPONENTS}) |
| include(${ROOT_USE_FILE}) | include(${ROOT_USE_FILE}) | ||
| message(STATUS "Found ROOT: ${ROOT_INCLUDE_DIRS}" | message(STATUS "Found ROOT: ${ROOT_INCLUDE_DIRS}" | ||
| message(" | message(" | ||
| + | </ | ||
| + | |||
| + | そして, | ||
| + | < | ||
| + | target_include_directories(MyApp PRIVATE ${ROOT_INCLUDE_DIRS}) | ||
| + | target_link_libraries(MyApp ${ROOT_LIBRARIES}) | ||
| + | </ | ||
| + | とすれば使えるはず. | ||
| + | |||
| + | ===boost=== | ||
| + | |||
| + | boost のライブラリを CMake で見つける方法.\\ | ||
| + | 以下を CMakeLists.txt に追加する. | ||
| + | < | ||
| + | set(Boost_USER_STATIC_LIBS OFF) | ||
| + | find_package(Boost 1.73 COMPONENTS system filesystem log regex) # 必要なものを追加 | ||
| + | if (Boost_FOUND) | ||
| + | message(STATUS "Boost library -- found" | ||
| + | message(STATUS " | ||
| + | include_directories(" | ||
| + | endif() | ||
| + | </ | ||
| + | |||
| + | ===Geant4=== | ||
| + | |||
| + | Geant4 のライブラリを CMake で見つける方法.\\ | ||
| + | 以下を CMakeLists.txt に追加する. | ||
| + | < | ||
| + | find_package(Geant4 REQUIRED) | ||
| + | # | ||
| + | include(${Geant4_USE_FILE}) | ||
| + | message(STATUS "Found Geant4: ${Geant4_INCLUDE_DIRS}" | ||
| + | </ | ||
| + | |||
| + | ===自作ライブラリ=== | ||
| + | |||
| + | いろいろ調べてコピペしたので間違ってても保証はできない.\\ | ||
| + | 少なくとも KEKCC の僕の環境では動いた. | ||
| + | < | ||
| + | SET(MYLIB_SERACH_PATHS | ||
| + | /usr/local | ||
| + | /opt/local | ||
| + | ${MYLIB_PATH} | ||
| + | ) | ||
| + | |||
| + | FIND_PATH(MYLIB_INCLUDE_DIR MyLib.hpp | ||
| + | HINTS | ||
| + | $ENV{MYLIBDIR} | ||
| + | PATH_SUFFIXES include/ | ||
| + | PATHS ${MYLIB_SEARCH_PATHS} | ||
| + | ) | ||
| + | |||
| + | FIND_LIBRARY(MYLIB_TEMP | ||
| + | NAMES MyLib | ||
| + | HINTS | ||
| + | ${ENV{MYLIBDIR} | ||
| + | PATH_SUFFIXES lib64/ | ||
| + | PATHS ${MYLIB_SEARCH_PATHS} | ||
| + | ) | ||
| + | |||
| + | IF(MYLIB_TEMP) | ||
| + | SET(MYLIB ${MCLIB_TEMP} CACHE STRING "Where mylib Library can be found" | ||
| + | SET(MCLIB_TEMP " | ||
| + | ENDIF(MYLIB_TEMP) | ||
| + | |||
| + | INCLUDE(FindPackageHandleStandardArgs) | ||
| + | |||
| + | FIND_PACKAGE_HANDLE_STANDARD_ARGS(MyLib REQUIRED_VARS MYLIB MYLIB_INCLUDE_DIR) | ||
| + | |||
| </ | </ | ||