C
cmake †
cmake_minimum_required(VERSION 3.10)
# TARGET 情報
set(TARGET sample)
set(VERSION 0.0.1.0)
set(DESCRIPTION "sample application")
set(HOMEPAGE_URL "https://...")
# 以下、少し簡単にコンパイルするための設定
set(SRCDIR app/src)
set(INCDIR app/include)
# C++ Version
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
set(CMAKE_CFLAGS "${CMAKE_C_FLAGS} -DSAMPLE_DEFINE=0x1234)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSAMPLE_DEFINE2")
# .so or .a
option(BUILD_SHARE_LIBS "Build using shared libraries" ON)
#project
project(${TARGET}
VERSION ${VERSION}
DESCRIPTION ${DESCRIPTION}
HOMEPAGE_URL ${HOMEPAGE_URL}
)
# サブディレクトリ追加 (リンクするライブラリディレクトリなど)
add_subdirectory(libxxx)
list(APPEND EXTRA_LIBS xxx)
file(GLOB SRCS ${SRCDIR}/*.c ${SRCDIR}/*.cpp ${SRCDIR}/*.s)
file(GLOB INCS ${INCDIR}/*.h ${INCDIR}/*.hpp)
add_executable(${TARGET} ${SRCS})
# OPTIONS
# コンパイラ依存 フラグなど
set(gcc_like_c "$<COMPILE_LANG_AND_ID:C,Clang,GNU>")
set(gcc_like_cxx "$<COMPILE_LANG_AND_ID:CXX,Clang,GNU>")
set(msvc_cxx "$<COMPILE_LANG_AND_ID:CXX,MSVC>")
#
target_compile_options(${TARGET} PUBLIC
"$<${gcc_like_cxx}:$<BUILD_INTERFACE:-Wall;-O3>>"
"$<${gcc_like_c}:$<BUILD_INTERFACE:-Wextra;-O1>>"
"$<${msvc_cxx}:$<BUILD_INTERFACE:-W3>>"
target_compile_features(${TARGET} PUBLIC cxx_std_17)
target_compile_definitions(${ARGET} PUBLIC XXX=1;YYY=2)
configure_file(app/include/config.h.in app/include/config.h)
target_lik_libraries(
${TARGET}
PUBLIC
${EXTRA_LIBS}
)
target_include_directories(
${TARGET}
PUBLIC
"${PROJECT_BINARY_DIR}/app/include"
)
install(TARGETS ${TARGET} DESTINATION bin)
install(FILES ${INC} DESTINATION include)
install(FILES ${PROJCT_BINARY_DIR}/app/include/config.h DESTINATION include)
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt")
set(CPACK_PACKAGE_VERSION_MAJOR "${sample_VERSION_MAJOR}")
set(CPACK_PACKAGE_VERSION_MINOR "${sample_VERSION_MINOR}")
set(CPACK_PACKAGE_VERSION_PATCH "${sample_VERSION_PATCH}")
set(PACK_SOURCE_GENERATOR "TGZ")
include(CPack)