CMakeのExternalProjectで外部プロジェクトのビルドシステムに環境変数を渡す

はじめに

CMake無限にわからん。 小ネタですが、調査したことは、まとめていきたいと思います。

ExternalProject_Add

CMakeで外部プロジェクトを取り込むには、ExternalProjectを使います。

cmake.org

まずは、ExternalProjectライブラリをincludeします。

# Include External Library
include(ExternalProject)

次にExternalProject_Addで外部プロジェクトを取り込みます。

ExternalProject_Add(
  ext_project                 # Name for custom target
  PREFIX     ${ext_build_dir} # Root dir for entire project
  SOURCE_DIR ${ext_src_dir}
  BINARY_DIR ${ext_src_dir}   # This particular build system is invoked from the root
  CONFIGURE_COMMAND ""         # Skip configuring the project, e.g. with autoconf
  BUILD_COMMAND
    make 
  INSTALL_COMMAND ""      # This particular build system has no install command
  BUILD_BYPRODUCTS ${ext_build_dir}/lib/libext.a
)

今回はローカルのソースファイルを使用しますが、gitレポジトリやダウンロードしてきたファイルを使用することもできます。

外部プロジェクトのビルドシステムは、Makefileなので、BUILD_COMMANDmakeとします。

外部Makefile環境変数を渡す

このMakefile環境変数を追加で渡したい場合、次のようにすれば良いです。

  BUILD_COMMAND
    make 
    PREFIX=${ext_build_dir}
    LIB_DIR=${LIB_DIR}

もう少しスマートなやり方があれば良いのですが…。

Makefileの方は、次のようにしておいて、単体でもビルドできるようにしています。

PREFIX ?= .
LIB_DIR ?= $(PREFIX)/lib