CMake by Example

Mirko Kiefer
Feb22,2017·4分読み取り

Mirko Kiefer<figure>src=

cmakeを学ぼうとすると、良い紹介が見つかりませんでした。 CMakeのドキュメントは非常に包括的ですが、初心者には適していません。 CMake Wikiにリンクされているいくつかの便利なチュートリアルがありますが、それらのほとんどは非常に具体的な問題だけをカバーしているか、基本的すぎ だから私はこの短いCMakeの紹介を、ドキュメントを調べてstackoverflowの質問に従った後に見つけたものの蒸留版として書いた。その進行中の作業と私は継続的にそれを改善しようとします。

CMakeは、さまざまなプラットフォーム用のネイティブビルドスクリプトを生成できるメタビルドツールです。

  • Unix Makefiles
  • Xcode
  • Visual Studio
  • CodeBlocks
  • Eclipse
  • その他…

CMakeジェネレータの完全なリストを参照してください。

単一のシンプルなアプリがあると仮定しましょう。cファイル。プロジェクトのルートにCMakeLists.txtファイルを作成します。p>

cmake_minimum_required(VERSION 2.8)project(app_project)add_executable(myapp main.c)install(TARGETS myapp DESTINATION bin)

利用可能なジェネレータのいずれかでアプリを構築できるようにするために必要なのはそれだけです。

add_executablebinディレクトリにバイナリをインストールするようにcmakeに指示します。

Building

CMakeはソース外のビルドをサポートしているため、コンパイルされたコードはすべてソースとは別のディレクトリに入ります。

ビルドを開始するには、新しいフォルダを作成します。

mkdir _build
cd _build

プロジェクトのルート(この場合は親フォルダ)へのパスを指定してcmakeを呼び出します。

cmake ..

これは、デフォルトのジェネレータを使用してビルドスクリプトを生成します。Linux/OSXでは、これはMakefileでなければなりません。

デフォルトでは、cmakeはビルドをシステムディレクトリにインストールします。
カスタムインストールディレクトリを定義するには、単にcmakeに渡します。

cmake .. -DCMAKE_INSTALL_PREFIX=../_install

ビルドスクリプトを実行するには、Makefileを使用するだけです:別のジェネレータを使用したい場合は、-Gパラメータを使用してcmakeに渡します。

cmake .. -GXcode
cmake .. -GXcode
cmake .. -GXcode
cmake .. -GXcode
cmake .. -GXcode
cmake .. -GXcode
cmake .. -GXcode
cmake .. -GXcode
cmake .. -GXcode
cmake .. -GXcode
cmake_minimum_required(VERSION 2.8)project(libtest_project)add_library(test STATIC test.c)install(TARGETS test DESTINATION lib)
install(FILES test.h DESTINATION include)

CMakeはライブラリをlibtest.aとしてビルドし、インストールディレク
また、パブリックヘッダーファイルをインストールステップに含め、cmakeにincludeに入れるように指示します。

静的ライブラリの代わりに、共有ライブラリも構築できます。

add_library(test SHARED test.c)

ライブラリをCMakeで実行可能ファイルにリンクする

libraylibtest.aにリンクすることで、実行可能ファイルを上から拡張することができます。

まず、ライブラリのディレクトリをmyappプロジェクトのサブディレクトリとして追加しましょう。これで、CMakeListsで定義されたライブラリを使用できます。myappのCMakeListsのlibtest_projectのtxt。txt:libtestprojectで定義されたライブラリtestをビルドで使用できるようにします。
target_link_librariesでは、CMakeに実行可能ファイルにリンクするように指示します。 CMakeはmyappにリンクする前に最初にテストをビルドします。

他のビルドシステムを使用して外部ライブラリを含む

CMakeの関心が高まっていますが、Unix Makefileのようなネイティブビルドシステムを使用しているライブラリはまだたくさんあります。 ビルドスクリプトを書き直すことなく、CMakeプロジェクトでそれらを使用できます。必要なのは、外部プロジェクトとインポートされたライブラリに対するCMakeのサポートだけです。

ExternalProject_Add(project_luajit
URL http://luajit.org/download/LuaJIT-2.0.1.tar.gz
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/luajit-2.0.1
CONFIGURE_COMMAND ""
BUILD_COMMAND make
INSTALL_COMMAND make install
PREFIX=${CMAKE_CURRENT_BINARY_DIR}/luajit-2.0.1
)ExternalProject_Get_Property(project_luajit install_dir)add_library(luajit STATIC IMPORTED)set_property(TARGET luajit PROPERTY IMPORTED_LOCATION ${install_dir}/lib/libluajit-5.1.a)add_dependencies(luajit project_luajit)add_executable(myapp main.c)include_directories(${install_dir}/include/luajit-2.0)target_link_libraries(myapp luajit)

ExternalProject_AddBUILD_COMMANDINSTALL_COMMAND、CMakeは検索しますCMakeLists.txt外部プ
私たちの場合は、Makefileを使用して構築されたluajitライブラリを利用したいと思います。p>

add_libraryIMPORTED_LOCATIONプロパティを設定するだけです。
ExternalProject_Addadd_dependenciestarget_link_librariesでリンクできます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です