我目前正在尝试在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
需要被取消。
答案 0 :(得分:2)
实际上,解决方案是删除-I/usr/include/pqxx
。但为什么呢?
他想要包含的文件是/usr/include/pqxx/pqxx
。
他将其包含在#include <pqxx/pqxx>
中(他没有提供有关stackoverflow的信息)。有了这个包含声明,他不需要额外的包含路径,因为/usr/include
在标准路径中。
但为什么构建失败?
% ~ 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标题文件列表。其余的只是重新格式化以获得更好的差异。
结果:-I/usr/include/pqxx
包含pqxx/tuple
而不是标准c ++ tuple
。这导致他在这里没有提供的编译错误。