CMakeノート(3)CMake常用コマンド

4781 ワード

CMake共通コマンド
1. project
project(projectname [CXX] [C] [Java])
プロジェクト名を指定し、プロジェクトがサポートする言語を指定します.サポート言語リストは無視できますが、デフォルトではすべての言語がサポートされています.
project(CMakeDemo)

2.set set(VAR[VALUE][CACHE TYPE DOCSTRING[FORCE])定義変数(複数のVALUEを定義可能)
set(SRC_LIST main.c util.c reactor.c)

3.メッセージメッセージ([SEND_ERROR|STATUS|FATAL_ERROR]「メッセージto display」…)は、ユーザ定義の情報または変数の値を端末に出力する.SEND_ERRORは、エラーが発生し、生成プロセスはSTATUSをスキップされ、プレフィックスが-の情報FATAL_を出力するERROR、直ちにすべてのcmakeプロセスを終了
message(${SRC_LIST})

4.add_executable
add_executable( [WIN32] [MACOSX_BUNDLE][EXCLUDE_FROM_ALL] source1 [source2 ...]) 実行可能ファイルの生成
add_executable(bin_file_name ${SRC_LIST})

5. add_library add_library(libname[SHARED|STATIC|MODULE][EXCLUDE_FROM_ALL]SRC_LIST)動的ライブラリまたは静的ライブラリSHARED動的ライブラリSTATIC静的ライブラリMODULEはdyldを使用するシステムで有効であり、dyldをサポートしなければSHARED EXCLUDE_に等しいFROM_ALLは、ライブラリがデフォルトで構築されないことを示します.

add_library(shared_demo SHARED ${SRC_LIST})

6. set_target_properties
set_target_properties(target1 target2 ... PROPERTIES prop1 value1 prop2 value2 ...)
ターゲットの属性値を設定、例えばstatic=>libstaticという出力ライブラリ名を設定する.a
set_target_properties(static_demo PROPERTIES OUTPUT_NAME "static") 

7.cmake_minimum_required cmake_minimum_required(VERSION version_number[FATAL_ERROR])CMakeのバージョン要件を宣言
cmake_minimum_required(VERSION 2.8)

8.add_subdirectory add_subdirectory(src_dir[binary_dir][EXCLUDE_FROM_ALL])現在のプロジェクトにソースファイルを格納するサブディレクトリを追加し、中間バイナリとターゲットバイナリの格納場所EXCLUDE_を指定できます.FROM_ALLの意味:このディレクトリをコンパイル中から除外する
サブディレクトリを追加すると、ソースファイルsrcディレクトリにアクセスして構築を続行できます.
add_subdirectory(${PROJECT_SOURCE_DIR}/src)

9.include_directories include_directories([AFTER|BEFORE][SYSTEM]dir 1 dir 2...)はgcc-Ixxxに相当し、プロジェクトに複数の特定のヘッダファイル検索パスを追加し、パス間をスペースで区切り、パスにスペースが含まれている場合は二重引用符で囲むことができ、デフォルトの動作は現在のヘッダファイル検索パスの後ろに追加されます.検索パスの追加場所を制御するには、cmake_の2つの方法があります.include_directories_beforeは、SETというcmake変数をonとすることで、追加したヘッダファイルの検索パスを既存のパスの前に置いてAFTERやBEFOREパラメータを通過したり、追加するか、前に置くかを制御することができます.
include_directories(${PROJECT_SOURCE_DIR}/include)

10.link_directories link_directories(dir 1 dir 2...)はgcc-L xxxに相当し、非標準の共有ライブラリ検索パスを追加する
link_directories("/opt/MATLAB/R2012a/bin/glnxa64")

11.target_link_libraries target_link_libraries(target lib 1 lib 2...)targetにリンクするライブラリファイルの名前を追加
target_link_libraries(main pthread)

12. link_libraries
 link_libraries([item1 [item2 [...]]] [[debug|optimized|general] ] ...)
リンクするライブラリファイルのパスを追加します.ここがフルパスであることに注意してください.
link_libraries("/opt/MATLAB/R2012a/bin/glnxa64/libeng.so" "/opt/MATLAB/R2012a/bin/glnxa64/libmx.so")

13. add_definitionsはC/C++コンパイラに-D定義を追加し、パラメータ間をスペースで区切る
add_definitions (-DENABLE_DEBUG -DABC)

14. add_dependencies  add_dependencies(target-name depend-target 1 depend-target 2...)は、target依存の他のtargetを定義し、targetが構築される前に依存するtargetが構築されていることを確認します.
15. aux_source_directory aux_source_ディレクトリの下にあるすべてのソースファイルをスキャンし、リストを変数に格納します.
aux_source_directory(. DIR_LIB_SRCS)

16.include include(file[OPTIONAL])CMakeListsをロードするために使用する.txtファイルinclude(module[OPTIONAL])予め定義されたcmakeモジュールOPTIONALパラメータをロードするための左右はファイルが存在しなくてもエラーが発生しない1つのファイルをロードすることもできますし、予め定義されたモジュール(モジュールはCMAKE_MODULE_PATHで指定されたパスで検索します)をロードする内容はinclude文の処理時に直接実行されます
17. find_file
find_file(name path 1 path 2...)VAR変数は、見つかったファイルのフルパスを表し、ファイル名を含む
18. find_libaray find_Libaray(name path 1 path 2...)VAR変数は、検出されたライブラリのフルパスを表し、ライブラリファイル名を含む
FIND_LIBRARY(libX X11 /usr/lib)
IF (NOT libx)
    MESSAGE(FATAL_ERROR "libX not found")
ENDIF(NOT libX)

19.find_path(name path 1 path 2...)VAR変数は、このファイルを含むパスを表します.
19. find_プログラム(name path 1 path 2...)VAR変数は、このプログラムを含む全パスを表す
20.find_Package([major.minor][QUITE][NO_MODULE][[REQUIRD|COMPONENTS][componets...])は、CMAKE_MODULE_PATH下のFind.cmakeモジュールは、自分でFindモジュールを定義し、SET(CMAKE_MODULE_PATH dir)を通じてプロジェクトのディレクトリに入れてプロジェクトに使用することもできます.
21.exec_program exec_プログラム(Executable[dir where to run][ARGS][OUTPUT_VARABLE][RETURN_VALUE])は、指定されたディレクトリでプログラム(デフォルトでは現在のCMakeLists.txtが存在するディレクトリ)を実行し、ARGSでパラメータを追加し、OUTPUT_VARABLEとRETURN_VALUEは、次の例のように出力と戻り値を取得します.
#  src   ls  , src/CMakeLists.txt  
exec_program(ls ARGS "*.c" OUTPUT_VARIABLE LS_OUTPUT RETURN_VALUE LS_RVALUE)
IF (not LS_RVALUE)
    MESSAGE(STATUS "ls result: " ${LS_OUTPUT}) #       ,     
ENDIF(not LS_RVALUE)

単純なCMakeエンジニアリングの例:
https://blog.csdn.net/weicao1990/article/details/72844995