第一个Qt程序

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
// 来自C++ GUI Programming with Qt 4
// 编译:
//    qmake -project
//    qmake
//    make
#include <QApplication>
#include <QLabel>

int main(int argc, char** argv)
{
    QApplication app(argc, argv);
    QLabel* label = new QLabel("Hello qt!");
    label->show();

    return app.exec();
}

命令行下查看deb包的依赖

命令行下察看deb包的依赖(如察看google chrome的依赖):

1
2
3
dpkg --info google-chrome-unstable_current_amd64.deb | grep Depends
 Pre-Depends: dpkg (>= 1.14.0)
 Depends: ca-certificates, libasound2, libatk1.0-0 (>= 1.13.2), libbz2-1.0, libc6 (>= 2.6-1), libcairo2 (>= 1.4.0), libfontconfig1 (>= 2.4.0), libfreetype6 (>= 2.3.5), libgcc1 (>= 1:4.2.1), libgconf2-4, libglib2.0-0 (>= 2.14.0), libgtk2.0-0 (>= 2.12.0), libjpeg62, libnspr4-0d (>= 4.7.1), libnss3-1d (>= 3.12.3), libpango1.0-0 (>= 1.18.3), libpng12-0, libstdc++6 (>= 4.2.1), libxslt1.1, libxss1, lsb-base (>= 3.2), wget, xdg-utils (>= 1.0.1), zlib1g (>= 1:1.2.3.3.dfsg-1)

 

让boost::program_options支持未注册的参数

如果在使用boost::program_options的时候传递了未注册的参数,则会throw exception,要想无视我们不需要的参数,可以通过使用basic_command_line_parser类来分析 (而不是parse_command_line) ,并且调用该类的 allow_unregistered 方法:

1
2
3
parsed_options = 
    command_line_parser(argv, argc).
    options(desc).allow_unregistered().run();

如果使用配置文件,则在调用parse_config_file的时候第三个参数传递true:

1
parse_config_file<char>(cfgfilename, desc, true)

vs2005下编译boost

vs2005下编译boost速度比较慢,由于默认使用的是bjam,不能通过incredibuild直接联编,所以只能通过incredibuild的xge接口来编译。我的编译过程:

  1. 首先编译bjam,cd到tools/jam/src目录,执行build.bat vc8,拷贝bin.ntx86下bjam.exe到boost根目录

  2. 新建一个boostib.xml文件,内容如下

1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Profile FormatVersion="1">
  <Tools>
    <Tool Filename="python" AllowIntercept="true" />
   <Tool Filename="bjam" AllowIntercept="true" />
    <Tool Filename="cl" AllowRemote="true" VCCompiler="True"/>
    <Tool Filename="link" AllowRemote="false" />
  </Tools>
</Profile>
  1. 新建一个boostib.bat文件,内容如下
1
XGConsole /command="bjam -j16 --toolset=msvc-8.0 --build-type=complete stage" /openmonitor /profile="boostib.xml"
  1. 执行boostlib.bat,库文件就在stage/lib目录下。至此完成编译!可是一看stage目录,这个硬盘占用也忒大了吧(2.58G)!!!

boost::program_options

由于windows上没有getopt,使用第三方库也比较麻烦,考虑boost提供了program_options可以用来替代getopt,见[Tutorial]

我在linux下测试了一下,挺方便的。

贴一下代码,唯一注意的是链接的时候需要libboost_program_options, ubuntu下安装

1
sudo apt-get install libboost-program-options-dev

链接的时候加入-lboost_program_options就行了。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <boost/program_options.hpp>

using namespace std;
using namespace boost::program_options;

// compile: g++ boostprogramoption.cpp -o boostprogramoption -lboost_program_options

int main(int argc, char** argv)
{
    // need to pass the buffer size (e.g. 1024) to the constructor, otherwise:
    // undefined reference to 'boost::program_options::options_description::m_default_line_length'
    options_description desc("Allowed options", 1024);
    desc.add_options()
        ("help,h", "produce help message")
        ("compression,c", value<int>(), "set compression level")
        ;

    variables_map vm;
    store(parse_command_line(argc, argv, desc), vm);
    notify(vm);

    if (vm.count("help")) {
        cout << desc << endl;
        return 1;
    }

    if (vm.count("compression")) {
        cout << "Compression level was set to " << vm["compression"].as<int>() << endl;
    } else {
        cout << "Compression level was not set." << endl;
    }

    return 0;
}

Tutorial