目录结构
.
|
| |
| |
| `
|
|
| |
| |
| `
`
|
`
根目录cmake
cmake_minimum_required(VERSION 3.7)
project(hello-cmake
VERSION 1.0.0
LANGUAGES CXX)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include(Options)
include(CompilerSettings)
include(ProjectJsonCpp)
add_subdirectory(libdevcore)
add_subdirectory(main)
cmake目录
- Options.cmake:用于指定编译特性选项,比如是否编译test模块,构建类型等
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)
endif()
- CompilerSettings.cmake:用于指定编译选项
include_directories(BEFORE ${PROJECT_SOURCE_DIR})
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
set(CMAKE_CXX_FLAGS "-std=c++11 -Wall -Wextra -pthread")
set(CMAKE_CXX_FLAGS_DEBUG "-Og -g")
set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
else()
message(FATAL "Your compiler is not supported.")
endif()
- ProjectJsonCpp.cmake:引入jsoncpp库
include(ExternalProject)
include(GNUInstallDirs)
ExternalProject_Add(jsoncpp
PREFIX ${CMAKE_SOURCE_DIR}/deps
DOWNLOAD_NAME jsoncpp-1.8.4.tar.gz
URL https://github.com/open-source-parsers/jsoncpp/archive/1.8.4.tar.gz
URL_HASH SHA256=c49deac9e0933bcb7044f08516861a2d560988540b23de2ac1ad443b219afdb6
CMAKE_COMMAND ${CMAKE_COMMAND}
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DJSONCPP_WITH_TESTS=OFF
-DJSONCPP_WITH_PKGCONFIG_SUPPORT=OFF
-DBUILD_STATIC_LIBS=ON
LOG_CONFIGURE 1
LOG_BUILD 1
LOG_INSTALL 1
)
ExternalProject_Get_Property(jsoncpp INSTALL_DIR)
set(JSONCPP_INCLUDE_DIR ${INSTALL_DIR}/include)
set(JSONCPP_LIBRARY ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}jsoncpp${CMAKE_STATIC_LIBRARY_SUFFIX})
file(MAKE_DIRECTORY ${JSONCPP_INCLUDE_DIR})
add_library(JsonCpp STATIC IMPORTED GLOBAL)
set_property(TARGET JsonCpp PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${JSONCPP_INCLUDE_DIR})
set_property(TARGET JsonCpp PROPERTY IMPORTED_LOCATION ${JSONCPP_LIBRARY})
add_dependencies(JsonCpp jsoncpp)
unset(INSTALL_DIR)
libdevcore模块cmake
file(GLOB SRCS "*.cpp")
file(GLOB HEADERS "*.h")
add_library(devcore STATIC ${SRCS} ${HEADERS})
main模块cmake
file(GLOB SRCS "*.cpp")
file(GLOB HEADERS "*.h")
add_executable(hello-cmake ${SRCS} ${HEADERS})
target_link_libraries(hello-cmake PUBLIC devcore JsonCpp)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)