User Tools

Site Tools


programming:cmake

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
programming:cmake [2022/03/28 10:41]
odagawa created
programming:cmake [2022/07/21 06:15] (current)
odagawa
Line 1: Line 1:
 =====CMake===== =====CMake=====
  
-  * ROOT +CMake は実行ファイル作成時の依存関係を整理し,Makefile などを作成してくれるソフトウェア.\\ 
-  ライブラリ+スクラッチで書いたことはないが,どこかから何かしらをコピペしながら覚えていくのがよいと思う.\\ 
 +おそらく最小単位は以下の通り (MyApp.cpp から MyApp を作成) 
 + 
 +<code> 
 +cmake_minimum_required(VERSION 3.10.2) 
 +add_executable(MyApp MyApp.cpp) 
 + 
 +</code> 
 + 
 +===ROOT=== 
 + 
 +ROOT のライブラリを CMake で見つける方法.\\ 
 +以下を CMakeLists.txt に追加する. 
 +<code> 
 +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}"
 +</code> 
 + 
 +そして, 
 +<code> 
 +target_include_directories(MyApp PRIVATE ${ROOT_INCLUDE_DIRS}) 
 +target_link_libraries(MyApp ${ROOT_LIBRARIES}) 
 +</code> 
 +とすれば使えるはず. 
 + 
 +===boost=== 
 + 
 +boost のライブラリを CMake で見つける方法.\\ 
 +以下を CMakeLists.txt に追加する. 
 +<code> 
 +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() 
 +</code> 
 + 
 +===Geant4=== 
 + 
 +Geant4 のライブラリを CMake で見つける方法.\\ 
 +以下を CMakeLists.txt に追加する. 
 +<code> 
 +find_package(Geant4 REQUIRED) 
 +#find_package(Geant4 REQUIRED COMPONENTS ui_tcsh) # GUI が必要な場合 
 +include(${Geant4_USE_FILE}) 
 +message(STATUS "Found Geant4: ${Geant4_INCLUDE_DIRS}"
 +</code> 
 + 
 +===自作ライブラリ=== 
 + 
 +いろいろ調べてコピペしたので間違ってても保証はできない.\\ 
 +少なくとも KEKCC の僕の環境では動いた. 
 +<code> 
 +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) 
 + 
 +</code>
programming/cmake.1648464060.txt.gz · Last modified: 2022/03/28 10:41 by odagawa