2.CMakeシリーズ-マルチファイルプロジェクトのコンパイル
10511 ワード
1.サードパーティ製ライブラリを使用しないアイテムのコンパイル
1.1プロジェクトディレクトリ構造
test/
├── build
├── CMakeLists.txt
└── src
├── include
│ └── sub
│ └── sub.h
├── init
│ └── main.c
└── sub
└── sub.c
ブロガーは一般的にプロジェクトを書くのがこのスタイルでディレクトリを分けていますが、このスタイルもカーネルスタイルを参考にしています.
build
:cmake生成関連ファイルとmakeコンパイル生成関連中間ファイルを格納CMakeLists.txt
:cmake構文を使用してこのファイルを作成し、cmakeはそれを対応するmakefileに変換する責任を負います.src
:ソースコードを格納include
:各モジュールヘッダファイルを格納し、各モジュールには独自のディレクトリがあります.1.2関連コード
sub.h
#ifndef _SUB_H
#define _SUB_H
int sub(const int a, const int b); #endif
sub.c
#include "sub/sub.h"
int sub(const int a, const int b) { return a - b; }
main.c
#include "sub/sub.h"
#include
int main(int argc, char **argv)
{
int num = sub(10, 8); printf("10 - 8 = %d
", num); return 0; }
CMakeLists.txt
cmake_minimum_required(VERSION 2.6)
project(project-1) message("Project Name: " ${PROJECT_NAME}) # set(CMAKE_C_FLAGS "-g -Wall") # set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) # include_directories(${PROJECT_SOURCE_DIR}/src/include) # C file(GLOB_RECURSE c_files ${PROJECT_SOURCE_DIR}/src/*.c) # add_executable(${PROJECT_NAME} ${c_files})
1.3コンパイル
testディレクトリへ
$ cd test
$ cd build $ cmake .. $ make $ cd .. $ tree bin
コンパイル後に実行ファイルを生成
bin
└── project-1
秩序ファイルの実行
$ cd bin
$ ./ project-1 10 - 8 = 2
2.サードパーティ製ライブラリを使用したプロジェクトのコンパイル
2.1プロジェクトディレクトリ構造
test1
├── build
├── CMakeLists.txt
└── src
├── include
│ └── sub
│ └── sub.h
├── init
│ └── main.c
├── lib
│ └── add
│ ├── include
│ │ └── add.h
│ └── lib
│ └── libadd.a
└── sub
└── sub.c
build
:cmake生成関連ファイルとmakeコンパイル生成関連中間ファイルを格納CMakeLists.txt
:cmake構文を使用してこのファイルを作成し、cmakeはそれを対応するmakefileに変換する責任を負います.src
:ソースコードを格納include
:各モジュールヘッダファイルを格納し、各モジュールには独自のディレクトリがあります.lib
:第3ライブラリのヘッダファイルとlibファイルを格納し、複数のサードパーティライブラリを使用する場合は、異なるディレクトリに分けて格納する必要があります.2.2関連コード
sub.h
#ifndef _SUB_H
#define _SUB_H
int sub(const int a, const int b); #endif
sub.c
#include "sub/sub.h"
int sub(const int a, const int b) { return a - b; }
add.h
#ifndef _ADD_H
#define _ADD_H
int add(const int a, const int b); #endif
main.c
#include "sub/sub.h"
#include "add.h"
#include
int main(int argc, char **argv) { int a = 10; int b = 8; printf("%d - %d = %d
", a, b, sub(a, b)); printf("%d + %d = %d
", a, b, add(a, b)); return 0; }
CMakeLists.txt
cmake_minimum_required(VERSION 2.6)
project(project-2) message("Project Name: " ${PROJECT_NAME}) # set(CMAKE_C_FLAGS "-g -Wall") # set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) # include_directories(${PROJECT_SOURCE_DIR}/src/include) # (add) include_directories(${PROJECT_SOURCE_DIR}/src/lib/add/include) # link_directories(${PROJECT_SOURCE_DIR}/src/lib/add/lib) # C file(GLOB_RECURSE c_files ${PROJECT_SOURCE_DIR}/src/*.c) # add_executable(${PROJECT_NAME} ${c_files}) # target_link_libraries(${PROJECT_NAME} add)
2.3コンパイル
test 1ディレクトリへ
$ cd test1
$ cd build $ cmake .. $ make $ cd .. $ tree bin
コンパイル後に実行ファイルを生成
bin
└── project-2
実行ファイルの実行
$ cd bin
$ ./ project-2 10 - 8 = 2 10 + 8 = 18
出典:https://www.cnblogs.com/standardzero/p/10781223.html