CMakeインスタンスノート
CMakeはプラットフォームにまたがる自動化構築システムであり、CMakeListsという名前を使用する.txtのファイルは、構築プロセスを記述します.この文書では、CMakeの基本的な構文について説明せず、実例から直接、CMakeLists.txtでコメントを行い、各構文の役割を説明します.
test 1:単一ソースファイル
cmakeを利用して簡単な比較サイズのC++プログラムを構築し、mainが1つしかない.cpp
CMakeListsを作成する.txtは,文の大文字と小文字に関する問題(変数のみが大文字と小文字を区別する)について,個人の記述習慣によって決まる.
test 2複数のソースファイル1ディレクトリ
上のソースファイルを2つのソースファイルの1つのヘッダファイルに分割します:1.main.cpp myabs.h myabs.cpp
CMakeListを作成する.txtファイル:
test 3複数ディレクトリ、複数ソースファイル(ライブラリを生成しない)
今すぐh&myabs.cppはmathディレクトリに移動し、ルートディレクトリのCMakeListsを変更する.txtファイル.このときサブディレクトリmathにはCMakeListsがない.txtファイル.
test 4すべてのファイルは異なるフォルダにあります(ライブラリは生成されません)
main.cppはmainディレクトリに移動するmyabs.h includeディレクトリに移動するmyabs.cppはmathディレクトリに移動し、ルートディレクトリのCMakeListsを変更する.txtファイル.このときサブディレクトリにはCMakeListsがない.txtファイル.
test 5異なるディレクトリ、リンクライブラリの生成
ルートディレクトリにmainを保存します.cppファイル、サブディレクトリmathにmyabsを格納h&myabs.cppファイル.ルートディレクトリCMakeListsを作成する.txt
サブディレクトリのCMakeListファイル
test 6はこんなに簡単な例を書いています.次は複雑な工事です.
このプロジェクトは、1つの静的ライブラリと1つの実行可能ファイルからなり、ヘッダファイルとソースファイルは同じディレクトリではなく、CMakeも1つのディレクトリcmakeディレクトリの各サブディレクトリの下に1つのCMakeListsが独立している.txtファイル:test 6->cmake->src->main&myabsヘッダファイル:test 6->includeソースファイル:test 6->main&myabsの下に3つのCMakeListをそれぞれ作成する.txtファイルtest 6->cmake:
test6->cmake->src:
test6->cmake->src->main:
test6->cmake->src->myabs:
(完)
test 1:単一ソースファイル
cmakeを利用して簡単な比較サイズのC++プログラムを構築し、mainが1つしかない.cpp
#include <iostream>
#include <math.h>
using namespace std;
double myabs(double value_)
{
return abs(value_);
}
void main()
{
int myvalue;
cout<<"Input value:";
cin>>myvalue;
cout<<"myabs:"<<myabs(myvalue)<<endl;
}
CMakeListsを作成する.txtは,文の大文字と小文字に関する問題(変数のみが大文字と小文字を区別する)について,個人の記述習慣によって決まる.
# CMake
cmake_minimum_required (VERSION 2.8)
# , main, main 。
project (Test1)
# , main.cpp Test1 。
add_executable(Test1 main.cpp)
test 2複数のソースファイル1ディレクトリ
上のソースファイルを2つのソースファイルの1つのヘッダファイルに分割します:1.main.cpp
#include "myabs.h"
double myabs(double value_)
{
return abs(value_);
}
#include <math.h>
double myabs(double value_);
#include "myabs.h"
double myabs(double value_)
{
return abs(value_);
}
CMakeListを作成する.txtファイル:
# CMake
cmake_minimum_required (VERSION 2.8)
#
project (Test2)
#
# SOURCE_FILES
aux_source_directory(. SOURCE_FILES)
file(GLOB HEADER_FILES *.h)
source_group("Header Files" FILES ${HEADER_FILES})
source_group("Source Files" FILES ${SOURCE_FILES})
#
add_executable(Test ${SOURCE_FILES} ${HEADER_FILES})
test 3複数ディレクトリ、複数ソースファイル(ライブラリを生成しない)
今すぐh&myabs.cppはmathディレクトリに移動し、ルートディレクトリのCMakeListsを変更する.txtファイル.このときサブディレクトリmathにはCMakeListsがない.txtファイル.
project (Test2)
#
# SOURCE_FILES
aux_source_directory(. SOURCE_FILES)
# CMake, myabs.cpp
file(GLOB SOURCE_MATH "${CMAKE_SOURCE_DIR}/math/*.cpp")
# CMake myabs.h
include_directories("${CMAKE_SOURCE_DIR}/math/")
#
add_executable(Test ${SOURCE_FILES} ${SOURCE_MATH})
test 4すべてのファイルは異なるフォルダにあります(ライブラリは生成されません)
main.cppはmainディレクトリに移動するmyabs.h includeディレクトリに移動するmyabs.cppはmathディレクトリに移動し、ルートディレクトリのCMakeListsを変更する.txtファイル.このときサブディレクトリにはCMakeListsがない.txtファイル.
# CMake
cmake_minimum_required (VERSION 2.8)
#
project (Test2)
# CMake, main.cpp
file(GLOB SOURCE_MAIN "${CMAKE_SOURCE_DIR}/main/*.cpp")
# CMake, myabs.cpp
file(GLOB SOURCE_MATH "${CMAKE_SOURCE_DIR}/math/*.cpp")
# CMake myabs.h
include_directories("${CMAKE_SOURCE_DIR}/include/")
#
add_executable(Test ${SOURCE_MAIN} ${SOURCE_MATH})
test 5異なるディレクトリ、リンクライブラリの生成
ルートディレクトリにmainを保存します.cppファイル、サブディレクトリmathにmyabsを格納h&myabs.cppファイル.ルートディレクトリCMakeListsを作成する.txt
# CMake
cmake_minimum_required (VERSION 2.8)
#
project (Test2)
#
# SOURCE_FILES
aux_source_directory(. SOURCE_FILES)
# math
add_subdirectory(math)
#
add_executable(Test6 main.cpp)
#
# target_link_libraries main Myabs
target_link_libraries(Test6 Myabs)
サブディレクトリのCMakeListファイル
#
# Myabs_LIB_SRCS
aux_source_directory(. Myabs_LIB_SRCS)
#
add_library (Myabs ${Myabs_LIB_SRCS})
test 6はこんなに簡単な例を書いています.次は複雑な工事です.
このプロジェクトは、1つの静的ライブラリと1つの実行可能ファイルからなり、ヘッダファイルとソースファイルは同じディレクトリではなく、CMakeも1つのディレクトリcmakeディレクトリの各サブディレクトリの下に1つのCMakeListsが独立している.txtファイル:test 6->cmake->src->main&myabsヘッダファイル:test 6->includeソースファイル:test 6->main&myabsの下に3つのCMakeListをそれぞれ作成する.txtファイルtest 6->cmake:
# CMake
cmake_minimum_required (VERSION 2.8)
#
project (Test6)
# , test6
set(PROJECT_ROOT_PATH "${CMAKE_SOURCE_DIR}/../")
# (CMAKE_SOURCE_DIR cmake )
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin/")
#
set(LIBRARY_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/lib/")
# CMake
include_directories("${PROJECT_ROOT_PATH}/include/")
# CMake
link_directories("${CMAKE_SOURCE_DIR}/lib/")
# , src
add_subdirectory(src)
test6->cmake->src:
add_subdirectory(main) add_subdirectory(myabs)
test6->cmake->src->main:
# CMake
file(GLOB SOURCE "${PROJECT_ROOT_PATH}/main/*.cpp")
# CMake main
add_executable(Test ${SOURCE})
# CMake
target_link_libraries(Test myabslib)
test6->cmake->src->myabs:
#
file(GLOB SOURCE "${PROJECT_ROOT_PATH}/myabs/*.cpp")
#
add_library(myabslib STATIC ${SOURCE})
(完)