=====CMake=====
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})
#set(ROOT_REQUIRED_COMPONENTS Minuit) # Minuit が必要な場合
#set(ROOT_REQUIRED_COMPONENTS Minuit Spectrum) # Minuit と Spectrum が必要な場合
find_package(ROOT 6.18 CONFIG REQUIRED ${ROOT_REQUIRED_COMPONENTS})
include(${ROOT_USE_FILE})
message(STATUS "Found ROOT: ${ROOT_INCLUDE_DIRS}")
message("-- Required ROOT components are: ${ROOT_REQUIRED_COMPONENTS}")
そして,
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 "BNoost library include dir : ${Boost_INCLUDE_DIRS}")
include_directories("${Boost_INCLUDE_DIRS}")
endif()
===Geant4===
Geant4 のライブラリを CMake で見つける方法.\\
以下を CMakeLists.txt に追加する.
find_package(Geant4 REQUIRED)
#find_package(Geant4 REQUIRED COMPONENTS ui_tcsh) # GUI が必要な場合
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/mylib/dir include
PATHS ${MYLIB_SEARCH_PATHS}
)
FIND_LIBRARY(MYLIB_TEMP
NAMES MyLib
HINTS
${ENV{MYLIBDIR}
PATH_SUFFIXES lib64/mylib/dir lib/mylib/dir
PATHS ${MYLIB_SEARCH_PATHS}
)
IF(MYLIB_TEMP)
SET(MYLIB ${MCLIB_TEMP} CACHE STRING "Where mylib Library can be found")
SET(MCLIB_TEMP "${MYLIB_TEMP}" CACHE INTERNAL "")
ENDIF(MYLIB_TEMP)
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(MyLib REQUIRED_VARS MYLIB MYLIB_INCLUDE_DIR)