cmake
cmake demo
根目录
${PROJECT_SOURCE_DIR}根目录下CMakelists.txt
CMAKE_MINIMUM_REQUIRED (VERSION 2.8 )
IF (CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_amd64" )
message (STATUS "x86_64 architecture detected" )
ELSEIF (CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "AMD64" )
message (STATUS "x64 architecture detected" )
ELSE ()
message (STATUS "x32 x64 or x86 isn't detected" )
ENDIF ()
if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message (STATUS "Setting build type to 'Release' as none was specified." )
set (CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build." FORCE)
set_property (CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
"MinSizeRel" "RelWithDebInfo" )
endif ()
SET (CMAKE_C_FLAGS_RELEASE "-D_REETRANT -DNDEBUG -fPIC -Wall -Wextra -pedantic -O3 -std=gnu99 -v" )
SET (CMAKE_C_FLAGS_DEBUG "-D_REETRANT -g -fPIC -Wall -Wextra -pedantic -O0 -v" )
SET (CMAKE_CXX_FLAGS_RELEASE "-Wall -O2" )
SET (CMAKE_CXX_FLAGS_DEBUG "-g" )
PROJECT (khl_project)
INCLUDE_DIRECTORIES (${PROJECT_SOURCE_DIR} /include )
OPTION (mps_en "Enable the mps: on/off" on )
IF (mps_en STREQUAL "off" )
MESSAGE (STATUS "Config: mps=off" )
ADD_DEFINITIONS ("-Dmps_en=0" )
ELSE ()
MESSAGE (STATUS "Config: mps=on" )
ADD_DEFINITIONS ("-Dmps_en=1" )
ENDIF ()
OPTION (daemon_en "Enable the daemon: on/off" on )
IF (daemon_en STREQUAL "off" )
MESSAGE (STATUS "Config: daemon=off" )
ADD_DEFINITIONS ("-Ddaemon_en=0" )
ELSE ()
MESSAGE (STATUS "Config: daemon=on" )
ADD_DEFINITIONS ("-Ddaemon_en=1" )
ENDIF ()
OPTION (loglevel "set the log level(0-fatal, 1-error, 2-warn, 3-info, 4-debug, 5-trace, default 3)" 3 )
IF (loglevel)
MESSAGE (STATUS "Config: loglevel=${loglevel}" )
ADD_DEFINITIONS ("-Dloglevel=${loglevel}" )
ENDIF ()
SET (EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR} /bin/)
ADD_SUBDIRECTORY (log)
SET (LINK_LIB ${LINK_LIB} log)
INCLUDE_DIRECTORIES (${PROJECT_SOURCE_DIR} /log/simple_log)
SET (LINK_LIB ${LINK_LIB} gcc_s)
ADD_SUBDIRECTORY (3 rd)
SET (LINK_LIB ${LINK_LIB} uv_a)
INCLUDE_DIRECTORIES (${PROJECT_SOURCE_DIR} /3 rd/libuv/include )
ADD_SUBDIRECTORY (lib)
ADD_SUBDIRECTORY (src)
ADD_SUBDIRECTORY (test )
ADD_SUBDIRECTORY (tools)
3rd
${PROJECT_SOURCE_DIR}/3rd目录下
# 指定CMake编译最低要求版本
CMAKE_MINIMUM_REQUIRED (VERSION 2.8 )
# 设置子目录并构建
ADD_SUBDIRECTORY (libuv)
${PROJECT_SOURCE_DIR}/log目录下
# 指定CMake编译最低要求版本
CMAKE_MINIMUM_REQUIRED (VERSION 2.8 )
# 设置子目录并构建
ADD_SUBDIRECTORY (simple_log)
${PROJECT_SOURCE_DIR}/log/simple_log目录下
CMAKE_MINIMUM_REQUIRED (VERSION 2.8 )
INCLUDE_DIRECTORIES (${PROJECT_SOURCE_DIR} /include )
SET (LIBLOG_SRC
log.h
log.c
)
ADD_LIBRARY (log SHARED
${LIBLOG_SRC}
)
target_include_directories (log PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
)
SET_TARGET_PROPERTIES (log PROPERTIES VERSION ${${PROJECT_NAME} _VERSION} SOVERSION ${${PROJECT_NAME} _SOVERSION})
install (FILES log.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
install (TARGETS log LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} )
src
${PROJECT_SOURCE_DIR}/src目录下
# 指定CMake编译最低要求版本
CMAKE_MINIMUM_REQUIRED (VERSION 2.8 )
# 设置子目录并构建
ADD_SUBDIRECTORY (client)
ADD_SUBDIRECTORY (codetest)
ADD_SUBDIRECTORY (kernel)
ADD_SUBDIRECTORY (server)
ADD_SUBDIRECTORY (pti)
ADD_SUBDIRECTORY (daemon)
${PROJECT_SOURCE_DIR}/src/client目录下
# FLEX 扫描器和BISON解析器,用于构建编译器
FIND_PACKAGE (FLEX)
FIND_PACKAGE (BISON)
# 引入线程包
FIND_PACKAGE (Threads)
add_executable (Network main.cpp)
target_link_libraries (${PROJECT_NAME} ${CMAKE_THREAD_LIBS_INIT})
# target_link_libraries (${PROJECT_NAME} pthread)
${PROJECT_SOURCE_DIR}/src/codetest目录下
${PROJECT_SOURCE_DIR}/src/kernel目录下
${PROJECT_SOURCE_DIR}/src/server目录下
CMAKE_MINIMUM_REQUIRED (VERSION 2.8 )
SET (TARGET server)
INCLUDE_DIRECTORIES (${CMAKE_CURRENT_SOURCE_DIR} /hh)
INCLUDE_DIRECTORIES (${CMAKE_CURRENT_SOURCE_DIR} /mm)
INCLUDE_DIRECTORIES (${CMAKE_CURRENT_SOURCE_DIR} /ll)
INCLUDE_DIRECTORIES (${CMAKE_CURRENT_SOURCE_DIR} /)
FILE (GLOB SERVER_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/*.c"
"${CMAKE_CURRENT_SOURCE_DIR}/hh/*.c"
"${CMAKE_CURRENT_SOURCE_DIR}/mm/*.c"
"${CMAKE_CURRENT_SOURCE_DIR}/ll/*.c" )
INCLUDE_DIRECTORIES (${PROJECT_SOURCE_DIR} /log/simple_log)
SET (SERVER_SRCS ${SERVER_SRCS} ${PROJECT_SOURCE_DIR} /log/simple_log/log.c)
IF (CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_amd64" )
message (STATUS "x86_64 architecture detected" )
ELSEIF (CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "AMD64" )
message (STATUS "x64 architecture detected" )
ELSE ()
message (STATUS "x32 x64 or x86 isn't detected" )
ENDIF ()
ADD_EXECUTABLE (${TARGET} ${SERVER_SRCS} )
TARGET_LINK_LIBRARIES (${TARGET} ${LINK_LIB} )
install (TARGETS ${TARGET}
RUNTIME
DESTINATION ${CMAKE_INSTALL_BINDIR} )
${PROJECT_SOURCE_DIR}/src/pti目录下
${PROJECT_SOURCE_DIR}/src/daemon目录下
test
${PROJECT_SOURCE_DIR}/test目录下
CMAKE_MINIMUM_REQUIRED (VERSION 2.8 )
FIND_PACKAGE (Threads REQUIRED)
include (ExternalProject)
ExternalProject_Add(
gtest
URL ${CMAKE_CURRENT_SOURCE_DIR} /gtest/release-1.12 .1 .zip
PREFIX ${CMAKE_CURRENT_BINARY_DIR} /gtest
INSTALL_COMMAND ""
TIMEOUT 60
GIT_PROGRESS true
)
ADD_SUBDIRECTORY (common_test)
ExternalProject_Get_Property(gtest SOURCE_DIR BINARY_DIR)
add_library (libgtest IMPORTED STATIC GLOBAL)
add_dependencies (libgtest gtest)
set_target_properties (libgtest PROPERTIES
"IMPORTED_LOCATION" "${binary_dir}/lib/libgtest.a"
"IMPORTED_LINK_INTERFACE_LIBRARIES" "${CMAKE_THREAD_LIBS_INIT}"
)
add_library (libgmock IMPORTED STATIC GLOBAL)
add_dependencies (libgmock gtest)
set_target_properties (libgmock PROPERTIES
"IMPORTED_LOCATION" "${binary_dir}/lib/libgmock.a"
"IMPORTED_LINK_INTERFACE_LIBRARIES" "${CMAKE_THREAD_LIBS_INIT}"
)
include_directories ("${SOURCE_DIR}/googletest/include"
"${SOURCE_DIR}/googlemock/include" )
${PROJECT_SOURCE_DIR}/test/common_test目录下
CMAKE_MINIMUM_REQUIRED (VERSION 2.8 )
FILE (GLOB TEST_SRCS
)
ADD_EXECUTABLE (test ${TEST_SRCS} )
TARGET_LINK_LIBRARIES (test
libgtest
libgmock
)
add_test (NAME test
COMMAND test )
cmake语法知识
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix