# enthal-auxtools-cpp **Repository Path**: enthal/enthal-auxtools-cpp ## Basic Information - **Project Name**: enthal-auxtools-cpp - **Description**: 通用的基本功能. 特色: - 层次化项目结构: <组织>/<模块>/<组件> - 部署目录与 linux 系统目录结构一致 - 高度复用的文件定义,极度简洁.CMake 的最佳实践. - 支持 find_package 的生成方式,便于外部项目引入. - 支持 系统安装包 deb 的打包. - **Primary Language**: C++ - **License**: MIT - **Default Branch**: develop - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-06-09 - **Last Updated**: 2022-01-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Enthal Cpp Boiler Cpp-Cmake 模板框架. 特色: - 层次化项目结构: <组织>/<模块>/<组件> - 部署目录与 linux 系统目录结构一致 - 高度复用的文件定义,极度简洁.CMake 的最佳实践. - 支持 find_package 的生成方式,便于外部项目引入. - 支持 系统安装包 deb 的打包. 本项目利用了 cmake 的多种特性,可作为 Cmake 使用的范本. 其中以下文件可以无需修改地拷贝使用(针对 enthal 下属项目,若其他则需自定义修改): - 根目录的`CMakeLists.txt` - VSCode 格式化文件 `.clang-format` - 整个 scripts 目录 - `enthal/ax/`目录下的 `config.cmake.in`. 使用需要保持相似的目录层次,即<组织>/<模块>/<组件>, 且三者与目录名与输出名上保持一致. 该文件需放置在模块层次内, 且同目录的`CMakeLists.txt`必须调用了`modbuild.cmake` - 整个`cmake`目录,其中设置依赖库的可以按需选择, 但`common`,`cpack`,`libbuild`,`modbuild`为基础模块,分别配置整个项目的编译选项,deb 打包,链接库构建与导出,模块声明定义. 而且其相对于模块或组件的目录层次最好保持类似结构. 说明: 1. 组织指的是项目标识,是一个虚拟的层次, 模块是子项目,处于组织之下的第一个层次, 组件是模块下的层次,为具体实现的链接库. 例如 enthal/ax/tm,便是这样的三层定义. 2. 变化较多的主要是模块层次的 CMakeLists.txt 的定义, 其次是各组件内的定义. 其中组件内,主要是指定其依赖的外部库,比较简单,模块内则需加入各种组件,对模块全局配置外部依赖,对仅头文件的组件配置列表等. ### 软件架构 ### 安装教程 ##### 源码构建 1. `./script/build-local.sh` 该方式同时会 install,默认生成于 `build-*/deploy`中, 同时会生成 deb 安装包. `./script/build-demo.sh` 会自动编译 demo,且会将其中的二进制 install 到前述建立的部署目录. 2. `mkdir build && cd build && cmake .. && make` 3. 将编译结果输出到指定目录,例如:`./scripts/build-local.sh -p ../../deploy` 其中 `../`为项目所在根目录,这样使用时,可将结果输出到一个共同的目录中。而且因为同时设置了 CMAKE_INSTALL_PREFIX 变量,所以也会自动从该输出目录中寻找依赖项目。 4. 将本项目作为子模块 在depends的CMakeLists.txt中,加入以下语句 ```cmake add_subdirectory(enthal-auxtools-cpp/depends) add_subdirectory(enthal-auxtools-cpp) ``` 即在 `./script/build-deps.sh`时,先把该模块的depends先构建了,再将该项目做子项目构建. * 获取所有依赖模块 `git submodule update --init --recursive` ##### 使用说明 1. install 之后, 直接 ``` include_directories(${CMAKE_INSTALL_PREFIX}/include) link_directories(${CMAKE_INSTALL_PREFIX}/lib) ``` 在源码引用 2. 在设置 `CMAKE_PREFIX_PATH` 包含 `${CMAKE_INSTALL_PREFIX}`之后, 使用 `find_package(OrgMod 0.0.11)`成功后, 配置引用目录. 目前这种方式暂时不支持 `COMPONENTS` 选项. ``` include_directories(${OrgMod_INCLUDE_DIR}) # link_directories(${OrgMod_LIB_DIR}) ``` 其中`include`可用的路径变量还可以使用: ``` OrgMod_INCLUDE_DIR OrgMod_INCLUDE_DIRS OrgMod_INCLUDES ``` ``` OrgMod_LIBRARY_DIR OrgMod_LIBRARY_DIRS OrgMod_LIB_DIR ``` 对于具体编译目标,设置链接库时,可用变量有: ``` OrgMod_LIBRARIES OrgMod_LIBRARY OrgMod_LIBS ``` 或者明确给定连接库名称,例如 ``` org::mod-fs ``` 设置链接库三种方式: ``` # A. find_package之后,直接填入 OrgMod_LIBS target_link_libraries(*** ${OrgMod_LIBS}) # B. find_package之后,通过lib的命名空间引入 target_link_libraries(*** enthal::aux-tm) # C. 直接给定链接库的名称 target_link_libraries(*** enthal-aux-tm) ``` 头两种方式无需将链接库所在路径加入到编译配置中, 即无需设置 `link_directories(${OrgMod_LIB_DIR})` 但如果是给定库名的最后一种,则需要给定如此做. 具体使用方法,可以参考 demo 中的例子, 其配置与编译独立于库, 可作为参考范本. 3. 运行 `*.deb`文件安装,然后在如常引用. ### nacos 1. docker pull nacos/nacos-server 2. docker run -d -p 8848:8848 --env MODE=standalone --name nacos nacos/nacos-server 3. default user/pwd: nacos/nacos C++ client: https://github.com/nacos-group/nacos-sdk-cpp.git ## 更新日志 * aux 在windows中是非法文件夹名,改为ax