CMake入門ノート
4465 ワード
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
CMakeステップアップ
Cross Compile
It is effective to have a cross compiling when debugging
Host PC: x86
Target: TX2 aarch64
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
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
よくあるエラー:
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 ..