IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 简单的cmakelist运用以及c++中tinyXml的使用 -> 正文阅读

[C++知识库]简单的cmakelist运用以及c++中tinyXml的使用

简单的cmakelist运用以及c++中tinyXml的使用

大致学习了一下CMakeLists,刚好想用一下c++中的tinyXml,就写了一个简单的工程

这是工程目录的目录结构

上面这个是工程目录的目录结构:
cmakeTest文件夹 相当于workSpace,也就是主目录
build文件夹 是cmake生成的中间文件的存放地
tinyXml文件夹 是tinyXml源码的地方,这个文件夹内有一个子目录的CMakeLists文件
CmakeLists 就是主目录的cmake文件
main.cpp 就是主文件
menu.xml 是测试解析xml的测试xml文件

先看menu.xml文件内容

<?xml version="1.0"?>
<breakfast_menu>
    <foods>
        <food>
            <name>Belgian Waffles</name>
            <price>$5.95</price>
            <description>two of our famous Belgian Waffles with plenty of real maple syrup</description>
            <calories>650</calories>
        </food>
        <food>
            <name>Strawberry Belgian Waffles</name>
            <price>$7.95</price>
            <description>light Belgian waffles covered with strawberries and whipped cream</description>
            <calories>900</calories>
        </food>
        <food>
            <name>Berry-Berry Belgian Waffles</name>
            <price>$8.95</price>
            <description>light Belgian waffles covered with an assortment of fresh berries and whipped cream</description>
            <calories>900</calories>
        </food>
        <food>
            <name>French Toast</name>
            <name>Test</name>
            <price>$4.50</price>
            <description>thick slices made from our homemade sourdough bread</description>
            <calories>600</calories>
        </food>
        <food>
            <name>Homestyle Breakfast</name>
            <price>$6.95</price>
            <description>two eggs, bacon or sausage, toast, and our ever-popular hash browns</description>
            <calories>950</calories>
        </food>
    </foods>
</breakfast_menu>

主要有breakfast_menu、foods、food三个node

然后看一下main.cpp文件如何使用tinyXml库来解析xml

// main.cpp
#include <iostream>
#include "tinyXml/tinyxml.h"
using namespace std;

void readXml()
{
    TiXmlDocument doc("C:\\workSpace\\xmlHander\\cmakeTest\\menu.xml");   //文件路径要全,一开始我只写了文件名导致打不开文件纠结了好久
    if (!doc.LoadFile())
    {
        std::cout << "failed to load xml file!" << std::endl;
        const char * error = doc.ErrorDesc();       //可以打印出错误信息

        cout << error << endl;
    }

    TiXmlHandle handler(&doc);      // handle的对象

    //结合xml文件看:
    //handler.FirstChild("breakfast_menu") 指的是获取breakfast_menu这个node的handler对象,返回值类型是TiXmlHandle
    //child("food,1")是指foods这个node下第2个food的node
    // TiXmlElement* desc = handler.FirstChild("breakfast_menu").FirstChild("foods").Child("food",1).FirstChildElement("description").ToElement();
    TiXmlElement* desc = handler.FirstChild("breakfast_menu").FirstChild("foods").Child("food",3).Child("name",1).ToElement();

    if (desc)
    {
        cout << "success" << endl;
    }
    else
    {
        cout << "error" << endl;
    }

    cout << desc->GetText() << endl;
}

int main()
{
    readXml();
}

最后看一下两个目录下的CMakeLists文件

# 子目录下的cmakelists.txt文件 
#
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)

# 生成(静态)链接库
add_library (tinyXml ${DIR_LIB_SRCS})

# 主目录的CMakeLists.txt文件
# 
# 指定cmake最低版本
cmake_minimum_required(VERSION 3.0)

# 项目名称(只是一个名字而已)
project(XmlParser)

# set( CMAKE_CXX_FLAGS "-std=c++11" )

# 如果不加下面两行,那么编译cmake时就要加参数-G “MinGW Makefiles” 用来指定编译器
# 通常需要加上,这样就可以直接在build目录下直接cmake .. 
# 描述有误,待验证
# 实际上应该是指定c语言文件和c++文件的默认编译器
# 如果win下环境变量里面没有设置mingw的路径的话,这里应该是可以帮助查找g++的路径
set(CMAKE_C_COMPILER "C:\\mingw64\\bin\\gcc")
set(CMAKE_CXX_COMPILER "C:\\mingw64\\bin\\g++")

# 添加了之后,就相当于在编译的时候加上了 -Wall -g选项
# -Wall : 编译时将错误信息打印出来
# -g : 启用gdb
add_definitions("-Wall -g")

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)

# 添加 tinyXml 子目录
add_subdirectory(tinyXml)

# 指定生成目标
# xmlParser : 目标文件的名字
add_executable(xmlParser ${DIR_SRCS})

# 添加链接库
target_link_libraries(xmlParser tinyXml)

以上代码均运行正常,注释中的描述可能有不对的地方,发现的话烦请各位指出,感激!

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 12:51:59  更:2022-01-16 12:53:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:29:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码