Skip to main content

Source

executable

実行ファイルを作る

WinMain

ADD_EXECUTABLE(hello WIN32 ${SRC})

lib

ADD_LIBRARY(lib_name STATIC
src.cpp
)

STATIC

デフォルト。省略してもよい。

ADD_LIBRARY(lib_name STATIC
src.cpp
)

SHARED

DLLを作る。

ADD_LIBRARY(lib_name SHARED
src.cpp
)

INTERFACE

header only のライブラリやビルド済みのライブラリで、dllso のコピーが発生しない場合に使用する。

# Catch2 header only
add_library(catch INTERFACE)
target_include_directories(catch INTERFACE ${CMAKE_CURRENT_LIST_DIR})
target_compile_options(catch INTERFACE /wd4996)
# ASIO header only
add_library(asio INTERFACE)
target_include_directories(asio INTERFACE asio/asio/include)

SHARED IMPORTED

ビルド済みのDLLで、 dllbin にコピーしたり、so を lib にコピーしたい場合に使う。

Android NDK で使う場合がある。 https://developer.android.com/studio/projects/configure-cmake?hl=ja

SHARED IMPORTED を指定すると、何故か target_include_directories などが使えなくなる。 代替として、 set_target_propertiesset_property を使う。

add_library(openxr_loader SHARED IMPORTED)
set_target_properties(
openxr_loader
PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${OPENXR_SDK_DIR}/include
IMPORTED_LOCATION
${MOBILE_SDK_DIR}/OpenXR/Libs/Android/${ANDROID_ABI}/Release/libopenxr_loader.so
)

INTERFACE_INCLUDE_DIRECTORIESIMPORTED_LOCATION の例

add_library(openxr_loader SHARED IMPORTED)
set_property(
TARGET openxr_loader
PROPERTY
IMPORTED_LOCATION
${OXR_LOADER_DIR}/OpenXR/Libs/Android/${ANDROID_ABI}/${CMAKE_BUILD_TYPE}/libopenxr_loader.so
)

IMPORTED_LOCATION の例

libopenxr_loader.so がビルド済みで CMAKE_LIBRARY_OUTPUT_DIRECTORY(lib) にコピーしたい。

target_source

add_executable, add_library に対してあとからソースを追加する。

target_sources(glfw PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/glfw_config.h")

glob

変数にソースを格納する

FILE(GLOB SRC
*.cpp
*.h
)

ADD_EXECUTABLE(hello ${SRC})