CMakeList.txt のクイックフィックス

目次

I. 概要

2. 共通コマンドとパラメータ

3. 事例の詳細説明

4. 追加パラメータ


I. 概要

CMake プロジェクトで CMake ビルド システムを使用する場合は、 CMakeLists.txt という名前のファイルを作成して、プロジェクトの構造、構成、ビルド プロセスを定義する必要があります。 CMakeLists.txt ファイルは、CMake 構文を使用してプロジェクトのビルド ルールと依存関係を記述するテキスト ファイルです。

2. 共通コマンドとパラメータ

`CMakeLists.txt` ファイルではさまざまなコマンドとパラメーターを使用して、プロジェクトの構造、構成、ビルド プロセスを定義できます。以下は、一般的に使用されるいくつかの CMake コマンドとパラメーターの説明です。

1. `cmake_minimum_required(VERSION <version>)`:

最低限必要な CMake バージョンを指定します。たとえば、「cmake_minimum_required(VERSION 3.12)」は、プロジェクトで少なくともバージョン 3.12 の CMake を使用する必要があることを意味します。

2. `project(<名前> [バージョン <バージョン>] [言語 <言語>])`:

プロジェクトの名前と関連オプションを設定します。 `project(<name>)` を使用してプロジェクトの名前を設定し、オプションで `VERSION` を使用してプロジェクトのバージョン番号を指定し、`LANGUAGES` を使用して使用するプログラミング言語を指定できます。

3. `add_executable(<name> [source1] [source2] ...)`:

実行可能ファイルを追加します。実行可能ファイルにコンパイルする 1 つ以上のソース ファイルを指定できます。

4. `add_library(<name> [SHARED|STATIC|MODULE] [source1] [source2] ...)`:

ライブラリファイルを追加します。ライブラリ ファイルにコンパイルする 1 つ以上のソース ファイルを指定でき、`SHARED`、`STATIC`、または `MODULE` パラメータを使用して生成するライブラリ ファイルのタイプを指定できます。

5. `target_link_libraries(<target> <library1> <library2> ...)`:

リンクライブラリを設定します。ターゲット ファイルとライブラリ ファイルをリンクすると、ターゲットがこれらのライブラリで定義されている関数やシンボルを使用できるようになります。

6. `include_directories(<dir1> [dir2] ...)`:

インクルードするヘッダー ファイルのディレクトリを指定します。コンパイラーがヘッダー ファイルを検索するために 1 つ以上のディレクトリを指定できます。

7. `link_directories(<dir1> [dir2] ...)`:

リンクするライブラリファイルのディレクトリを指定します。リンカーがライブラリ ファイルを検索するために 1 つ以上のディレクトリを指定できます。

8. `target_include_directories(<target> <INTERFACE|PUBLIC|PRIVATE> <dir1> [dir2] ...)`:

指定されたターゲットのインクルード ディレクトリを設定します。 `INTERFACE`、`PUBLIC`、または `PRIVATE` を使用して、これらを含むディレクトリのスコープを制御できます。

9. `target_link_directories(<target> <INTERFACE|PUBLIC|PRIVATE> <dir1> [dir2] ...)`:

指定されたターゲットのリンク ディレクトリを設定します。 「INTERFACE」、「PUBLIC」、または「PRIVATE」を使用して、これらのリンクされたディレクトリの範囲を制御できます。

10. `set(<変数><値>)`:

変数の値を設定します。キャッシュ変数は、`set(<variable> <value> CACHE <type> <docstring> [FORCE])` を使用して設定できます。

3. 事例の詳細説明

cmake_minimum_required(VERSION 3.0)
project(TestDemo)

get_filename_component(SDKLibPath "../../sdk/lib/libTestSDK.so" ABSOLUTE)

include_directories(../../sdk/inc)
include_directories(../..)

aux_source_directory(../../case DEMO_SRCS)
aux_source_directory(../.. DEMO_SRCS)

set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer -static-libasan")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -static-libasan")

add_compile_options("-Wno-format-zero-length")

add_executable(TestDemo ${DEMO_SRCS})

target_link_libraries(TestDemo gtest)
target_link_libraries(TestDemo pthread)
target_link_libraries(TestDemo dl)
target_link_libraries(TestDemo ${SDKLibPath})

理解できない場合は、下の説明を読んで、もう一度読んでください。​ 

cmake_minimum_required(VERSION 3.0)

このコマンドは、最低限必要な CMake バージョンが 3.0 であることを指定します。

project(TestDemo)

このコマンドは、プロジェクトの名前を「TestDemo」に設定します。

get_filename_component(SDKLibPath "../../sdk/lib/libTestSDK.so" ABSOLUTE)

このコマンドは、指定されたパスの下にあるファイルの絶対パスを取得します。 「…/…/sdk/lib/libTestSDK.so」の絶対パスを変数 SDKLibPath に格納します。

include_directories(../../sdk/inc)
include_directories(..)

これら 2 つのコマンドは、ヘッダー ファイル ディレクトリを追加するために使用されます。これらは、コンパイラーがヘッダー ファイルの検索に使用するディレクトリのリストに、「../../sdk/inc」および「..」ディレクトリを追加します。

aux_source_directory(../../case DEMO_SRCS)
aux_source_directory(.. DEMO_SRCS)

これら 2 つのコマンドは、指定されたディレクトリ内のソース ファイルを変数に自動的に追加するために使用されます。 「../../case」および「..」ディレクトリ内のソース ファイルを変数 DEMO_SRCS に追加します。

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer -static-libasan")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -static-libasan")

これら 2 つのコマンドは、コンパイラのコンパイル オプションを設定するために使用されます。 C および C++ コンパイラ オプションに -fsanitize=address -fno-omit-frame-pointer -static-libasan オプションが追加されます。

add_compile_options("-Wno-format-zero-length")

このコマンドは、コンパイル オプションを追加するために使用されます。長さゼロの書式文字列に関する警告を抑制するための -Wno-format-zero-length オプションをコンパイラのオプションに追加します。

add_executable(TestDemo ${DEMO_SRCS})

このコマンドは、実行可能ファイル TestDemoを追加するために使用されます。そのソース ファイルは、 DEMO_SRCS 変数で指定されたソース ファイルです。

target_link_libraries(TestDemo gtest)
target_link_libraries(TestDemo pthread)
target_link_libraries(TestDemo dl)
target_link_libraries(TestDemo ${SDKLibPath})

これら 4 つのコマンドは、リンク ライブラリを構成するために使用されます。 gtestpthreaddl 、 ${SDKLibPath} になります (つまり、以前に取得した絶対パス)。実行可能ファイル TestDemo にリンクして、実行可能ファイルがこれらのライブラリで定義されている関数とシンボルを使用できるようにします。

4. 追加パラメータ

継続的に更新中...

おすすめ

転載: blog.csdn.net/weixin_36389889/article/details/131852491