@applejxd

雑記帳

CMake & C++ ビルドメモ

目次

CMake

実行方法

単一ファイルの場合

# CMake のバージョン指定
# 3.8 では Google Test に関する機能が使える
cmake_minimum_required(VERSION 3.8.0)
project(Main)
add_executable(Main main.cpp)
# コンパイルオプション指定
target_compile_options(Main PUBLIC -O2 -Wall)
# 特定の機能を持つバージョンを指定
# cf. http://tinyurl.com/y48o2xhh
target_compile_features(Main PUBLIC cxx_std_11)

階層化プロジェクトのビルド

cmake_minimum_required(VERSION 3.8.0)
project(Main)

add_executable(Main main.cc)
target_compile_options(Main PUBLIC -O2 -Wall)
target_compile_features(Main PUBLIC cxx_std_11)

# サブディレクトリのプロジェクトを追加してリンク
add_subdirectory(src)
target_link_libraries(Main PUBLIC Sub)

# テストを有効化
enable_testing()
add_subdirectory(test)
cmake_minimum_required(VERSION 3.8.0)

add_library(Sub SHARED sub.cpp)

# ヘッダファイルのフォルダを指定
target_include_directories(Sub PUBLIC
  ${PROJECT_SOURCE_DIR}/include
)
cmake_minimum_required(VERSION 3.8.0)

include(GoogleTest)

add_library(GTest
    SHARED ${PROJECT_SOURCE_DIR}/test/gtest/gtest-all.cc
)
target_include_directories(GTest
    PUBLIC ${PROJECT_SOURCE_DIR}/test
)

add_library(GMain
    SHARED ${PROJECT_SOURCE_DIR}/test/gtest/gtest_main.cc
)
target_include_directories(GMain
    PUBLIC ${PROJECT_SOURCE_DIR}/test
)

add_executable(SolverTest solver_test.cc)
target_compile_options(SolverTest PUBLIC -O2 -Wall)
target_compile_features(SolverTest PUBLIC cxx_std_11)
target_link_libraries(SolverTest
    PUBLIC
        GTest
        GMain
)

gtest_add_tests(TARGET SolverTest)

コマンドラインでのビルド

function runcpp () {
  g++ -O2 $1
  shift
  ./a.out $@ 
}
# Suffix Alias
alias -s {c,cpp}='runcpp'    

# コンパイル
./main.cpp