我在我的c ++ 11项目中使用了syntastic.当我在vim中编辑,并保存(:w)时,syntastic插件会在每个初始化列表{}和每个循环上给出错误,这些循环显然是缺少的c ++ 11特性.
我用病原体安装了合成器.
以下是我在初始化列表和每个循环上获得的错误的两个示例(c ++ 11编译正常):

这是我目前为项目设置的Jenkins:
这种设置使我可以在开发过程中持续自动交付以及持续反馈.前3个工作也运行所有测试和覆盖报告.
问题是我找不到从"所有开发分支"工作中排除主分支的方法.每次合并一个pull-request时,它都会不必要地构建master两次.
有谁知道如何从詹金斯的工作中排除一个分支?
ps:我正在使用Git和Github插件.我的项目存储在Github上.
我正在尝试编译一个广泛使用c ++ 11标准的c ++项目.只用-std = c ++ 11,一切都很顺利,直到我尝试使用unordered_map而MacOS在usr/include中的任何地方都没有unordered_map头文件.
我做了一些研究,发现使用-stdlib = libc ++会修复它(不知道如何,如果包含文件在文件系统中没有任何地方,这对我来说似乎很神奇).它确实做到了.编译得很好,但链接器无法链接到我的程序也广泛使用的boost :: program_options.没有-stdlib = libc ++,可以完美地提升链接,但是我失去了unordered_map.
我应该怎么做才能拥有Mac OS clang ++编译器的最新C++ 11功能,并且仍然可以链接到boost库(这是从这个mac上的源代码构建的)
ps:在我的arch linux框中一切正常
我的makefile:
LIBS = -lboost_program_options CXXFLAGS = -stdlib = libc ++ -std = c ++ 11 -Wall -g OBJ = fastq.o fastq_reader.o main.o degenerate.o interleave.o complement.o interval_utils.o interval.o interval_utils_test_tool.o
foghorn:$(OBJ)$(LINK.cc)-o $ @ $ ^ $(LIBS)
输出使用-stdlib = libc ++
$ make c ++ -stdlib = libc ++ -std = c ++ 11 -Wall -g -c -o fastq.o …
我正在使用他们分发的clang 3.5.我正在使用以下命令行在我的travis vm中安装它:
sudo apt-add-repository 'deb http://llvm.org/apt/precise/ llvm-toolchain-precise-3.5 main'
sudo apt-add-repository 'deb http://llvm.org/apt/precise/ llvm-toolchain-precise-3.5 main'
Run Code Online (Sandbox Code Playgroud)
当我在启用优化的情况下运行我的测试版本时,我收到此错误:
clang: error: optimization flag '-finline-functions' is not supported
"clang++" -c -x c++ -std=c++1y -Werror -O3 -finline-functions -Wno-inline -Wall -Werror -pthread -fPIC -std=c++1y -DBOOST_ALL_DYN_LINK -DNDEBUG -I"." -I"gamgee" -I"lib/htslib" -o "test/bin/run.test/clang-linux-3.5.0/release/threading-multi/sam_builder_test.o" "test/sam_builder_test.cpp"
Run Code Online (Sandbox Code Playgroud)
我在我的mac上运行较旧的3.4版本的clang时没有得到相同的错误.
clang是否削减了对3.5中的-finline-functions的支持?这是关于这个包构建的具体内容吗?如何用clang-3.5 +替换-finline-functions选项来优化构建?
我已经配置了Jenkins Github Pull-Request构建器插件来构建我所在机构成员提出的每个请求.它就像一个魅力.
但是,构建不会将构建状态报告回github,就像它在这篇不错的帖子中所显示的那样.我还尝试选中"在更新提交状态失败时使用注释来报告结果"复选框,但我仍然无法回复github.
我在GitHub上创建了一个bot用户,并赋予它对repo的推送和管理权限.
我的Jenkins服务器位于防火墙之后,但由于它正常构建并检测到github repo的变化(通过轮询),我认为这不是问题.
其他人有这个问题吗?你是怎么解决的?
这是我的控制台输出的转储(为了便于阅读而压缩)
Started by an SCM change
Building in workspace
Fetching changes from the remote Git repository
Fetching upstream changes from repo
Seen branch in repository origin/HEAD
Seen branch in repository origin/master
Seen branch in repository origin/pr/1/head
Seen branch in repository origin/pr/1/merge
Seen branch in repository origin/pr/10/head
[…]
Seen branch in repository origin/pr/9/head
Seen branch in repository origin/pr/9/merge
Seen 33 remote branches
Checking out Revision 9b4d45ee3a2d265a1268c2931e7b2bcb738e1c87 (origin/pr/16/merge)
First time build. Skipping …Run Code Online (Sandbox Code Playgroud) 做这个的最好方式是什么 ?
我有一个合理的感觉,#4 是不可能的。
我一直在尝试使用 #1,但我已经遇到了 git 子模块的不便之处。
我觉得#2 与#1 相似,但略好于#1,但如果你这样做,你如何进行开发?您是在系统中安装依赖库还是将它们保存在源代码树中(但不在源代码管理中)以模拟构建环境?
很多问题,但希望有一个最终的答案。
假设我想要一个接收一些参数的构造函数,并且使用这些参数我可以计算它的成员变量的值.除了成员变量的值不是参数的简单赋值.它们需要创建其他对象并转换值,然后才能将它们用作成员变量的值.
这是填充初始化列表的方法.由于无法创建变量并重复使用它们,因此您必须复制代码(并生成同一对象的多个副本)以适合初始化列表中的所有代码,因此效率也非常低.
另一个选项是不使用初始化列表并让默认构造函数被调用,然后用整齐的计算覆盖构造函数内的值.
现在如果该类没有默认构造函数怎么办?怎么能整齐地做到这一点?
/* a class without a default constructor */
class A {
public:
B x1
B x2
A(B x1_, B x2_) : x1{x1_}, x2{x2_} {};
};
/* a class that contains an A object and needs to initialize it based on some complex logic */
class C {
public:
A a;
C(D d) :
a{b1,b2} // ultimately I just want to initialize a with two B objects
// but unfortunatelly they require a lot of work to …Run Code Online (Sandbox Code Playgroud) BOOST_LOG_SEV我正在尝试使用严重性通道记录器,但我遇到了不是 const 方法的问题- 我想是因为 open_record() 和 push_record()
这基本上会迫使我将类中的所有方法设置为非 const,因为它们想要写入记录器。我真的负担不起这样做——所以目前我只能使用全球记录器。
在我当前的实现中,每个类都有一个以类名作为通道的记录器(在其构造函数中初始化),并且它随时发出日志消息BOOST_LOG_SEV(this->logger, level)
我很想听听非 constness 背后的原因,以及我的设计是否不适合 Boost::Log。
我正在使用基于范围的 for 循环来使用迭代器读取(和解析)文件。我的循环看起来像这样:
for (auto record : reader) {
if (even)
record.reverse_complement();
cout << record.write();
even = !even;
}
Run Code Online (Sandbox Code Playgroud)
我已经向迭代器的构造函数和析构函数添加了输出,看起来在 for 循环的每次迭代中,析构函数在 end() 返回的迭代器上被调用。
calling fq_iter FULL constructor
calling fq_iter default constructor
calling fq_iter destructor on 0
calling fq_iter destructor on 0
calling fq_iter destructor on 0
calling fq_iter destructor on 0
calling fq_iter destructor on 0
calling fq_iter destructor on 0
calling fq_iter destructor on 0
calling fq_reader destructor on 0
Run Code Online (Sandbox Code Playgroud)
这些是我用来解析和迭代文件的类,知道为什么每次迭代都调用析构函数吗?(除此之外,它会产生正确的输出)。
c++ ×6
c++11 ×3
boost ×2
git ×2
jenkins ×2
boost-log ×1
clang ×1
constructor ×1
dependencies ×1
destructor ×1
foreach ×1
github ×1
inline ×1
iterator ×1
macos ×1
pull-request ×1
syntastic ×1
vim ×1