CMakeインスタンスノート


CMakeはプラットフォームにまたがる自動化構築システムであり、CMakeListsという名前を使用する.txtのファイルは、構築プロセスを記述します.この文書では、CMakeの基本的な構文について説明せず、実例から直接、CMakeLists.txtでコメントを行い、各構文の役割を説明します.
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_);
}
  • myabs.h
  • #include <math.h>
    double myabs(double value_);
  • myabs.cpp
  • #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})

    (完)