帮酷LOGO
  • 显示原文与译文双语对照的内容
Basic but working C++ project using CMake, boost and Doxygen

  • 源代码名称:CppProjectTemplate
  • 源代码网址:http://www.github.com/Barthelemy/CppProjectTemplate
  • CppProjectTemplate源代码文档
  • CppProjectTemplate源代码下载
  • Git URL:
    git://www.github.com/Barthelemy/CppProjectTemplate.git
  • Git Clone代码到本地:
    git clone http://www.github.com/Barthelemy/CppProjectTemplate
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/Barthelemy/CppProjectTemplate
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • Build Status

    这个 C++ 项目演示了使用 CMake 。boost测试。boost解析选项和Doxygen的用法。 这并不是最简单的例子,因为我们希望以适当的非简单方式使用它们。 它还显示了一种构造代码和其他类型文件的方法。

    项目描述和目标

    我们的项目由两个子项目组成: ProjA和 ProjB 。ProjB取决于 ProjA 。 项目生成 2个库( libproja.so 和 libprojb.so ) 和 2二进制文件,链接到各自的库( projArunner和 projBrunner ) 。 应该生成多个平台的软件包: 1 single ProjB和 3,ProjA ( 库,开发,文档) 不同。 我们对每个应该运行的项目进行测试。

    我们希望能够独立编译一个或者两个项目,或者同时编译。 独立编译ProjB时,我们必须先从源代码或者从包中安装 ProjA 。

    项目结构与组织

    The general structure is
    ├── cmake
    │ └── <all cmake macro files requested by more than one subproject>
    ├── CMakeLists.txt # main CMakeLists.txt
    ├── ProjA
    │ ├── cmake
    │ │ ├── CPackConfig.cmake # for Cpack
    │ │ └── ProjAConfig.cmake # for subprojects interdependencies
    │ ├── CMakeLists.txt # main CmakeLists.txt for ProjA
    │ ├── doc
    │ │ └── <Doxygen files and CMakeLists.txt>
    │ ├── include
    │ │ ├── CMakeLists.txt
    │ │ └── ProjA # project subfolder to appear in includes (e.g. include <ProjA/World.h>)
    │ │ ├── CMakeLists.txt
    │ │ ├── Version.h.in # template for the Version class
    │ │ └── World.h
    │ ├── src
    │ │ ├── CMakeLists.txt # this is where we define the key targets for this subproject
    │ │ ├── main.cxx
    │ │ ├── Version.cxx
    │ │ └── World.cxx
    │ └── test
    │ ├── CMakeLists.txt
    │ └── testProjA.cxx
    ├── ProjB
    │ └── <same as ProjA>
    └── README

    每个子项目中的头文件和源文件都被拆分。 标题位于一个目录的NAME 目录下。 我们希望库的用户编写"包括 <projA/xxx 。h>",而不仅仅是"包含 <xxx.h>"来避免冲突。

    要求

    控件

    CMake ( www.cmake.org ) 是我们在这个项目中使用的工具。 它的配置文件是一个纯文本文件 CMakeLists.txt.,你将在这个自述文件旁边找到一个示例。 它被大量注释以供参考。

    的方式

    生成该项目的命令将是:

     mkdir build_dir
     cd build_dir
     cmake.. 
     make 
     make install

    默认情况下安装到/usr/local/。

    更先进的方式

    要使用它,在项目的顶部目录中运行 ccmake.. 。 然后打开你想要的选项,通过箭头向上和向下,击"输入"编辑值,然后再次打开版本。 例如你可能希望为示例项目启用构建文档。 然后按"c"后按"g"生成生成文件。 它会把你带回到终端。 然后键入"制作"

    你还可以使用"-dmy_variable值"在配置参数时将参数传递给它。 例如使用调试符号构建调试版本或者发布版本可能类似于:

     cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo.. 
     cmake -DCMAKE_BUILD_TYPE=Debug.. 
    下拉列表目标

    从。/build或者./ProjX/build, 可以调用:

    • 使 [-j <number_of_parallel_jobs> ]
    • 进行测试
    • make install
    • 制作文档
    • 制作软件包

    重要说明:要单独编译 ProjB,必须首先制作和安装 ProjA 。 另外,必须添加到路径并将安装目录添加到。

    文档( Doxygen )

    在 CMakeLists.txt, 中有一个默认的doc目标,它是在你键入"制作文档"时生成的。 你必须在系统上安装doxygen才能正常工作。 有关如何编写doxygen注释的提示,请参阅源代码。 你可以通过在doc目录中编辑配置文件来定制输出。

    文档被放置在:BUILD_DIR/doc BUILD_DIR是你说"制作"的构建。 安装后,默认情况下将进入/usr/local/share.

    测试

    在 CMakeLists.txt. 中定义了 2个虚拟测试 单元测试 源位于测试目录中。 要运行虚拟测试,请执行"进行测试"。

    升压

    我们使用 find_package ( 提升。),并传递我们打算使用的组件列表,即unit_test_framework和 program_options,在 CMakeLists.txt 中包括 Boost 。

    前者是为了简化单元测试的开发,后者是帮助获取二进制文件的选项。 有关示例,请参见 apps/hellorunner/main.cxx 。

    和 Git

    这个项目展示了如何使用Git或者SVN修订号。 在主 CMakeLists.txt 中,我们通过注释和注释相应的行来包含一个或者另一个。 它将定义一个在生成 libs/hello/Version.h. 时使用的CMake变量

    为了从Git存储库检索分支和修订信息,GetGitRevisionDescription MODULE 已经被添加到"控件"目录中的CMake文件夹中。 从Git开始,将成为官方发行版分发的一部分,直到那时它必须成为应用程序的一部分。

    封装

    CPack允许构建基于标签的软件包。 应该添加 CPackConfig,因为它在 CMakeLists.txt. CPackConfig.cmake的最后一行中完成,并且包含所需的变量。 如果你做"制作软件包",它将创建一个 tarball,一个. deb 和一个 rpm 。

    代码格式和美化程序

    格式化程序包含一组规则,该规则可以用于调整源代码以编码约定。 Clang有许多预定义格式规则,但是这里我们使用一个定制的。 要使用它,首先必须安装 clang 。 要在单个文件上运行它并查看修改后的文件内容,请执行以下操作:

    clang-format -style=file <source file> # from the top directory

    在所有子目录上运行它,并用修改后的内容替换. cxx 和. h 文件的内容:

    find. -name *.cxx -o -name *.h | xargs clang-format -style=file -i

    注释

    with是跨平台,因这里有可以能只存在与它的他平台兼容的命令。 在这个项目中,我们关注 Linux,为了简单起见,我们删除了大部分。

    有关任何问题,请联系: Barthélémy von ( barthelemy_vonhaller@yahoo.fr )




    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语