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:31] odagawa |
programming:cmake [2022/07/21 06:15] (current) odagawa |
||
---|---|---|---|
Line 1: | Line 1: | ||
=====CMake===== | =====CMake===== | ||
- | * [[programming: | + | CMake は実行ファイル作成時の依存関係を整理し,Makefile などを作成してくれるソフトウェア.\\ |
- | | + | スクラッチで書いたことはないが,どこかから何かしらをコピペしながら覚えていくのがよいと思う.\\ |
+ | おそらく最小単位は以下の通り (MyApp.cpp から MyApp を作成) | ||
+ | |||
+ | < | ||
+ | cmake_minimum_required(VERSION 3.10.2) | ||
+ | add_executable(MyApp MyApp.cpp) | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===ROOT=== | ||
+ | |||
+ | ROOT のライブラリを CMake で見つける方法.\\ | ||
+ | 以下を CMakeLists.txt に追加する. | ||
+ | < | ||
+ | list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS}) | ||
+ | # | ||
+ | # | ||
+ | find_package(ROOT 6.18 CONFIG REQUIRED ${ROOT_REQUIRED_COMPONENTS}) | ||
+ | include(${ROOT_USE_FILE}) | ||
+ | message(STATUS "Found ROOT: ${ROOT_INCLUDE_DIRS}" | ||
+ | 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 | ||
+ | / | ||
+ | / | ||
+ | ${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) | ||
+ | |||
+ | </ |