# pre_cmake **Repository Path**: lu_han_dong/pre_cmake ## Basic Information - **Project Name**: pre_cmake - **Description**: pre_cmake 预编译的cmake 准备仓库 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-11-27 - **Last Updated**: 2025-11-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 描述 该库,功能是支持一些cmake 的功能。 每次写cmake 的时候都很麻烦的去搜索cmake 写法。 目前支持一下: add_obj.cmake 添加lib add_exe.cmake 添加exe project_setup 在没有配置参数的时候,设置默认值,并且打印参数值 get_files_by_pattern.cmake 搜索目录下指定通配符的所有文件名字 ## add_obj.cmake 用法 ``` include(cmake/add_obj.cmake) 这个实现了 编译库,以及安装和打包 add_obj( NAME MyLib # 这个是库名字 SOURCES src/core.cpp ... # 依赖的源文件名字 PUBLIC_HEADERS include/mylib/api.h ... PRIVATE_HEADERS src/internal/helper.h ... GENERATED_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/config.h ... PUBLIC_DEPENDS Threads::Threads ... PRIVATE_DEPENDS OpenSSL::SSL ZLIB::ZLIB ... TYPE SHARED # 这里是动态库,也可以是STATIC 静态库 ) ``` ## add_app.cmake ``` include(cmake/add_app.cmake) 这个实现了 exe,以及安装和打包 add_app( NAME MyApp SOURCES main.cpp app.cpp DEPENDS TestLib Threads::Threads RESOURCES data/config.json data/icons/ # 可选:安装到 share/ ) ``` ## project_setup.cmake ``` include(project_setup.cmake) 这个可以打印必要的变量,目前包含的变量如下: print_project_config() ``` 下面是打印结果; ``` -- ==================== Project Configuration ==================== -- Project Name: Project -- Build Type: Release -- Install Prefix: /home/lhd/workspace/taskPool/test_cmake/project/build/install -- Prefix Path: /home/lhd/workspace/taskPool/test_cmake/project/build/install -- Binary Dir: /home/lhd/workspace/taskPool/test_cmake/project/build -- Source Dir: /home/lhd/workspace/taskPool/test_cmake/project -- Host System: Linux -- CMake Version: 3.22.1 -- ============================================================== ``` ## get_files_by_pattern.cmake ``` include(cmake/get_files_by_pattern.cmake) get_files_by_pattern( OUTPUT_VAR source_files # source_files 是输出的变量名字 PATTERN "*.cpp" "*.h" # 匹配模式 PATH src/ # 查找的目录 [RECURSE] # 递归模式 [ABSOLUTE_PATH] # 可选:返回绝对路径,默认为相对路径(相对于 CMAKE_CURRENT_SOURCE_DIR ) ``` ## 使用demo 目录结构 ``` . ├── cmake │ ├── add_app.cmake │ ├── add_obj.cmake │ ├── CrossCompileUtils.cmake │ ├── get_files_by_pattern.cmake │ ├── InstallUtils.cmake │ ├── PackageUtils.cmake │ └── project_setup.cmake ├── CMakeLists.txt ├── config │ ├── test1.config │ ├── test1.doc │ └── test2.config ├── include │ ├── export │ │ └── export.hpp │ ├── private │ │ └── private.hpp │ └── public │ └── public.hpp ├── readme.md └── src ├── lib.cpp └── main.cpp ``` 使用CmakeLists.txt ``` include(cmake/project_setup.cmake) include(cmake/InstallUtils.cmake) include(cmake/PackageUtils.cmake) include(cmake/add_obj.cmake) include(cmake/add_app.cmake) include(cmake/get_files_by_pattern.cmake) set(LIB_SRC "src/lib.cpp") # 第二步:打印配置(可选,但推荐) print_project_config() get_files_by_pattern( OUTPUT_VAR public_headers PATTERN "*.hpp" PATH include/public [RECURSE] ) get_files_by_pattern( OUTPUT_VAR export_headers PATTERN "*.hpp" PATH include/export [RECURSE] ) get_files_by_pattern( OUTPUT_VAR private_headers PATTERN "*.hpp" PATH include/private [RECURSE] ) message("export_headers=${export_headers}") message("public_headers=${public_headers}") # 这里会自动,编译 TestLib 库,并且打包成find_package可以找到的库 add_obj( NAME TestLib SOURCES ${LIB_SRC} PUBLIC_HEADERS ${public_headers} ${public_headers} ${export_headers} PRIVATE_HEADERS ${private_headers} TYPE SHARED ) set(EXE_SRC "src/main.cpp") # 类似的将 TestExe 编译安装 add_app( NAME TestExe SOURCES ${EXE_SRC} DEPENDS TestLib ) ```