cget 介绍
github:https://github.com/pfultz2/cget
Cmake包管理工具。这可以用来下载和安装cmake包。使用cget的优点是:
- 非侵入性:不需要在cmake中编写特殊的钩子就可以使用cget。编写了一个cmake文件,可用于安装带有cget或standalone的包。
- 开箱即用:由于它使用了cmake的标准构建和安装,因此它几乎可以与所有cmake包一起使用。不需要等待包转换为支持cget。可以立即安装标准的cmake包。
- 分散:包可以从任何地方安装,从github、url或本地文件。
cget安装
$ pip3 install cget
$ cget --help
Usage: cget [OPTIONS] COMMAND [ARGS]...
Options:
--version Show the version and exit.
-p, --prefix TEXT Set prefix used to install packages
-v, --verbose Enable verbose mode
-B, --build-path TEXT Set the path for the build directory to use when
building the package
-h, --help Show this message and exit.
Commands:
build Build package
clean Clear directory
ignore Ignore packages
init Initialize install directory
install Install packages
list List installed packages
pkg-config Pkg config
remove Remove packages
size
inja介绍
github:https://github.com/pantor/inja
inja是现代C++的模板引擎,它由jinja的Python宽松地启发。它有一个简单但功能强大的模板语法,包含所有需要的变量、循环、条件、include、回调和注释,可以根据需要进行嵌套和组合。Inja使用nlohmann提供的出色的json库进行数据输入。最重要的是,JINA只需要两个头文件,这几乎是C++中集成所能得到的微不足道的东西。
inja安装
mkdir ~/Software -p && cd ~/Software
或者
mkdir ${ProjectRoot}/3rd/ -p && cd ${ProjectRoot}/3rd/
# 可以直接
cget pantor/inja # 会直接下载https://github.com/pantor/inja/archive/HEAD.tar.gz
# 后面可以指定版本
cget pantor/inja@v2.1.0 #会直接下载https://github.com/pantor/inja/archive/v2.1.0.tar.gz
# 也可以用源码安装
git clone https://github.com/pantor/inja.git pantor/inja
# 指定版本需要改分支
cd pantor/inja && git checkout -b v2.1.0 v2.1.0 && cd ../../
# 构建包
cget build ./pantor/inja
# 安装包
cget install pantor/inja
引用inja
# CMakeLists.txt
set(CMAKE_VERSION 3.0.0)
project(inja_demo)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_COMPILER /usr/local/bin/g++)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
include_directories(~/Software/cget/include)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}~/Software/cget/lib)
find_package(inja)
message(STATUS ${INJA_VERSION})
add_executable(inja_fst inja_fst.cc)
target_link_libraries(inja_fst
pantor::inja
)
// inja_fst.cc
#include <inja/inja.hpp>
#include <iostream>
int main() {
nlohmann::json mode;
mode["name"] = "tadus";
auto s = inja::render("Hello {{name}}", mode);
std::cout << s << std::endl;
return 0;
}
mkdir build
cd build && cmake ..
make
./bin/inja_fst