用于C ++ 11的Sublime Text构建文件

时间:2014-06-26 11:02:03

标签: c++11 build g++ sublimetext3

我目前正在尝试在Sublime Text中设置我的构建系统来编译C ++ 11 Code,另外还使用libpqxx库来处理一些Postgres数据库。

现在,没有C ++ 11,我的g ++命令如下所示:

    "cmd": ["g++", "${file}", "-o", "${file_path}/${file_base_name}", "-I/usr/include/pqxx", "-lpqxx", "-lpq"]

哪种方法正常。

现在我将"-std=c++0x"添加到该行,但它不起作用。但是,我编写了一个简单的测试程序,其中包含#include <regex>,使用默认构建文件启动并添加了C ++ 11标志,如下所示:

    "cmd": ["g++", "-std=c++0x", "${file}", "-o", "${file_path}/${file_base_name}"]

工作正常。

我还尝试使用以下行从终端运行构建:

    g++ Connect.cpp -o Connect -std=c++0x -I/usr/include/pqxx -lpqxx, -lpq

但也没有运气。

此外,我为-std=c++0x尝试了不同的地方。在g++之后,在输入和输出文件名之后,在include之后,在libary链接之后。我试图将标志改为-std+gnu++11-std=c++11-std=gnu++0x。什么都没有帮助。

我做错了什么?

(顺便说一下,我的GCC / G ++版本为4.9,所以C ++ 11本身应该没有任何问题。没有lipqxx的testfile.cpp包含和链接工作如前所述)


解决方案:-I/usr/include/pqxx需要被取消。

1 个答案:

答案 0 :(得分:2)

实际上,解决方案是删除-I/usr/include/pqxx。但为什么呢?

  1. 他想要包含的文件是/usr/include/pqxx/pqxx。 他将其包含在#include <pqxx/pqxx>中(他没有提供有关stackoverflow的信息)。有了这个包含声明,他不需要额外的包含路径,因为/usr/include在标准路径中。

  2. 但为什么构建失败?

    % ~ cpp -Wall -std=c++11 -M test.cpp > test2              
    % ~ cpp -Wall -std=c++11 -I/usr/include/pqxx -M test.cpp > test
    % ~ cat test2 | sed "s/ \\\\//g" | sed "s/ /\n/g" | sort > test2  
    % ~ cat test | sed "s/ \\\\//g" | sed "s/ /\n/g" | sort > test
    % ~ diff test test2
    235d234
    < 
    270a270
    > /usr/include/c++/4.9.0/array
    404a405
    > /usr/include/c++/4.9.0/tuple
    496d496
    < /usr/include/pqxx/tuple
    

    -M选项输出一个makefile.compatible标题文件列表。其余的只是重新格式化以获得更好的差异。

  3. 结果:-I/usr/include/pqxx包含pqxx/tuple而不是标准c ++ tuple。这导致他在这里没有提供的编译错误。