CMake入門ノート


CMake入門
CMakeはCMakeListsを通過する.txtはmakefileを生成し,大量のファイルを含むエンジニアリングコンパイルに便利である.
インストラクション
説明する

PROJECT
_BINARY_DIRおよび_SOURCE_DIRを暗黙的に定義するプロジェクト名を設定します.
PROJECT(helloworld)
SET
変数の設定
SET(SRC_LIST main.c fun.c)
MESSAGE
メッセージの印刷
MESSAGE(STATUS/SEDN_ERROR/FATAL_ERROR “todisplay” )
ADD_EXEUTABLE
ターゲットファイルの生成
ADD_EXEUTABLE(your_exe main.c fun.c)
ADD_LIBRARY
動的ライブラリまたは静的ライブラリの生成
ADD_LIBRARY(your_lib_name STATIC/SHARED> )
SET_TARGET_PROPERTIES
同時生成に用いることができる.so和lib,設定.soのバージョン番号とapi番号
NA
ADD_SUBDIRECTORY
ソースファイルを含むサブディレクトリの追加
NA
TARGET_LINK_LIBRARIES
リンクに必要なlibrary
TARGET_LINK_LIBRARIES(project_name lib***.so/*) TARGET_LINK_LIBRARIES(project_name ${GTEST_LIBRARY})
LINK_DIRECTORIES
非標準ライブラリ検索ライブラリ検索パスの追加
NA
INCLUDE_DIRECTORIES
ヘッダファイル検索パスの追加
(BEFORE{OpenCV_INCLUDE_DIRS})BEFOREが追加したヘッダファイル検索パスは、デフォルトパスの前にあり、逆にAFTER
INSTALL
生成する実行可能ファイルのインストールに使用することができる.so .libと.shおよび一般ファイル
NA
よくあるエラー:
  • set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
  • 誤用LIBRARY_OUTPUT_DIRECTORYでは出力パスを設定できません.CMakeLists.txtが間違って書いた.cファイル、C++ヘッダファイルmakeが見つかりません.変更します.cppまたはcc
  • 
    mkdir Project
    
    cd Project
    
    gedit CMakeLists.txt
    
    mkdir src
    
    cd src
    
    touch main.c
    
    vi main.c
    
    :qw
    
    mkdir build
    
    cd build
    
    gedit CMakeLists.txt
    
    #CMAKE       ,out-of-source,      ,       build,  buil     cmake ..
    
    cmake .. 
    
    make -j 
    

    CMakeステップアップ
    Cross Compile
    It is effective to have a cross compiling when debugging
    Host PC: x86
    Target: TX2 aarch64
    
    sudo apt-get install g++-4.9-aarch64-linux-gnu
    
    
    #Point out the target
    
    set(CMAKE_SYSTEM_NAME Linux)
    
    #Specify the cross compiler
    
    #set(CMAKE_CXX_COMPILER /path/to/compiler)
    
    set(CAME_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++)
    
    # Just make sure you set the CMAKE_FIND_ROOT_PATH variable to a path where you have #an exact copy of the root filesystem you have on your target device (with libraries and binaries #pre-compiled for the target processor).
    
    set(CMAKE_FIND_ROOT_PATH /path/to/copied root filesysem of target)
    
    set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
    
    set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
    
    set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
    

    CMAKE_FIND_ROOT_PATH_MODE_PROGRAM sets the default behaviour for the FIND_PROGRAM() command. It can be set to NEVER, ONLY or BOTH (default). If set to NEVER, CMAKE_FIND_ROOT_PATH will not be used for FIND_PROGRAM() calls (except where it is enabled explicitely). If set to ONLY, only the search directories with the prefixes coming from CMAKE_FIND_ROOT_PATH will be used in FIND_PROGRAM(). The default is BOTH, which means that at first the prefixed directories and after that the unprefixed directories will be searched. In most cases FIND_PROGRAM() is used to search for an executable which will then be executed e.g. using EXECUTE_PROCESS() or ADD_CUSTOM_COMMAND(). So in most cases an executable from the build host is required, so usually set CMAKE_FIND_ROOT_PATH_MODE_PROGRAM to NEVER.
    You can make above file to ba X.cmake, and use CMAKE_TOOLCHAIN_FILE
    
    cd build
    
    cmake -DCMAKE_TOOLCHAIN_FILE = ~/X.cmake ..