cmake的使用总结

cmake的使用总结

参考链接

https://subingwen.cn/cmake/CMake-primer/
https://subingwen.cn/cmake/CMake-advanced/?highlight=cmake

CMake文件

yh@ubuntu:/Test/jsoncpp$ tree
.
├── build
├── CMakeLists.txt
├── json
│   ├── allocator.h
│   ├── assertions.h
│   ├── config.h
│   ├── forwards.h
│   ├── json_features.h
│   ├── json.h
│   ├── reader.h
│   ├── value.h
│   ├── version.h
│   └── writer.h
├── main.cpp
└── src
    ├── json_reader.cpp
    ├── json_tool.h
    ├── json_value.cpp
    ├── json_valueiterator.inl
    └── json_writer.cpp

3 directories, 17 files

CMakeLists.txt文件

cmake_minimum_required(VERSION 3.5)

project(jsoncpp)
include_directories(${PROJECT_SOURCE_DIR})
file(GLOB LIBRARY_SRC_LIST "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")

#设置静态库和动态库所需的中间文件列表
set(LIBRARY_OBJS_LIST ${PROJECT_NAME}-objs)
add_library(${LIBRARY_OBJS_LIST} OBJECT ${LIBRARY_SRC_LIST})
#开启静态库和动态库所需的中间文件的PIC编译选项
set_target_properties(${LIBRARY_OBJS_LIST} PROPERTIES POSITION_INDEPENDENT_CODE True)

#生成静态库
#设置静态库文件临时名称
set(TMP_STATIC_LIB_NAME ${PROJECT_NAME}-static)
#生成静态库文件
add_library(${TMP_STATIC_LIB_NAME} STATIC $<TARGET_OBJECTS:${LIBRARY_OBJS_LIST}>)
#设置静态库文件的最终名称
set_target_properties(${TMP_STATIC_LIB_NAME} PROPERTIES OUTPUT_NAME ${PROJECT_NAME})

#生成动态库
#设置动态库文件临时名称
set(TMP_SHARED_LIB_NAME ${PROJECT_NAME}-shared)
#生成动态库文件
add_library(${TMP_SHARED_LIB_NAME} SHARED $<TARGET_OBJECTS:${LIBRARY_OBJS_LIST}>)
#设置动态库文件的最终名称
set_target_properties(${TMP_SHARED_LIB_NAME} PROPERTIES OUTPUT_NAME ${PROJECT_NAME})

#生成测试文件
add_executable(test${PROJECT_NAME} main.cpp)
target_link_libraries(test${PROJECT_NAME} ${TMP_STATIC_LIB_NAME})

main.cpp

#include <json/json.h>
#include <iostream>

using namespace std;

int main(int argc, const char *argv[])
{
	Json::Value root;
	Json::FastWriter writer;
	Json::StreamWriterBuilder wBuilder;
	root["name"] = "张三";
	root["age"] = 18;
	cerr << writer.write(root) << endl;
	std::cout << Json::writeString(wBuilder, root) << std::endl;
	return 0;
}

修复jsoncpp1.9.5中的中文被显示为\u的错误

json_writer.cpp第275行

static String valueToQuotedStringN(const char* value, size_t length,
                                   bool emitUTF8 = false)
修改为
static String valueToQuotedStringN(const char* value, size_t length,
                                   bool emitUTF8 = true)

json_writer.cpp第1239行

(*settings)["emitUTF8"] = false;
修改为
(*settings)["emitUTF8"] = true;

Linux下编译步骤

进入build目录开始编译
cd build && cmake .. && make -j8

windows下编译

方式1

cd build
cmake -G "NMake Makefiles" ..
nmake

方式2

#参考https://developer.valvesoftware.com/wiki/Building_without_Visual_Studio#Step_2:_Compiling
cd build
cmake ..
msbuild jsoncpp.sln
posted @ 2024-03-22 01:36  Linux袁浩  阅读(31)  评论(0)    收藏  举报