我目前正在使用jenkins/hudson进行持续集成,主要是一个C++项目.我们为主干和每个分支都有单独的项目.此外,还有一些Java代码的相关项目,但是这些项目的设置现在相当基础(我们可能会在稍后做更多).C++项目执行以下操作:
一切都可以配置为自动构建,可选配置为按需构建.在下面,有一个bash脚本控制其中的大部分内容,这更依赖于我们的构建系统,它使用automake和autoconf以及自定义bash脚本.
我们开始使用Hudson(当时)因为这是Java人员正在使用的东西,我们只想要夜间构建.从那时起,我们增加了很多,并继续增加更多.在某些方面哈德森很棒,但肯定不理想.
我已经看过其他解决方案了,唯一看起来像是替代品的是buildbot.buildbot会更好地适应这种情况吗?自从我们已经在使用Hudson以来,投资是否值得?为什么?
编辑:有人问为什么我没有发现哈德森/詹金斯是理想的.简短的回答是一切都可以改进.我只是想知道,如果詹金斯是我的使用情况或是否有更好的东西(buildbot?),这将是更容易保持在即使有新的要求上来从长远看目前最好的解决方案.
有谁知道如何在Eclipse CDT中编辑用于Doxygen评论的样式?
换句话说,键入/**并enter在函数之前按下一行就会产生类似于:
/**
*
* @param one
* @param two
* @return
*/
Foo(int one, int two);
Run Code Online (Sandbox Code Playgroud)
我希望它能给我一些类似的东西:
/**********************************************************************/
///
/// \param one
/// \param two
/// \return
/***********************************************************************/
Foo(int one, int two);
Run Code Online (Sandbox Code Playgroud)
此外,再加上一个,如果任何人知道如何把它绑定到键盘快捷键(如alt- shift- j为Eclipse JDT).
此外,仅供参考,Eclipse CDT支持Doxygen的事实现在似乎是一个基于谷歌的鲜为人知的事实.详情请见此处.通过在"C/C++常规"选项卡中选择"启用项目特定设置"并选择"Doxygen",可以在项目属性下启用Doxygen.我的CDT版本是7.0.1,但我认为这在5.0中可用.
最后,首选项中代码模板下的注释部分无法根据我的测试完成此操作.
编辑: 见这里.似乎评论样式是硬编码的.如果有人发现,我很想知道.我想模板现在是最好的,除非Javadoc风格适合你.
是否可以通过运行链接到使用--coverage选项构建的共享库的可执行文件来生成gcov数据文件(.gcda文件)?
基本上,我有一个主库,它由多个编译成一个共享库的c ++文件组成,然后是一个名为"test"的子目录,其中包含一个链接到并测试主库的测试程序.一切都编译好,并为库源文件和测试源文件生成.gcno文件..gcda文件只为测试源文件生成,但我真的需要它们用于编译到共享库中的实际源文件.
有任何想法吗?
附加信息:
- 这是所有C++代码
- 一切都是使用由automake生成的make脚本构建的
- 在共享库中
为lib_la_CPPFLAGS和lib_la_LDFLAGS指定了--coverage选项Makefile.am - 为AM_CPPFLAGS和AM_LDFLAGS指定了--coverage选项在测试可执行文件Makefile.am中
- 测试源文件使用Google Test(C++单元测试框架)
编辑:固定间距问题
在C++中是否可以使用另一个基类在派生类中提供接口(即抽象基类)的实现?
class Base
{
virtual void myfunction() {/*...*/};
}
class Interface
{
virtual void myfunction() = 0;
}
class Derived
: public Base, public Interface
{
// myfunction is implemented by base
}
Run Code Online (Sandbox Code Playgroud)
上面应该编译,但实际上不起作用.有没有办法达到这个效果?
如果有人关心,想要这个的原因是(对我的应用程序)使用来自另一个项目/命名空间的通用库来提供我的项目中的接口的实现是有意义的.我可以把所有东西都包起来,但这似乎是很多额外的开销.
谢谢.
如何通过包含与另一个包含的另一个头文件同名的头文件来创建解决方案?
例如:
// src/blah/a.hpp
#ifndef A_HPP
#define A_HPP
namspace blah
{
class A
{
}
}
#endif
// src/blah/b.hpp
#ifndef B_HPP
#define B_HPP
#includes "a.hpp"
namspace blah
{
class B
{
}
}
#endif
// src/foo/a.hpp
#ifndef A_HPP
#define A_HPP
namspace foo
{
class A
{
}
}
#endif
// src/foo/c.hpp
#ifndef C_HPP
#define C_HPP
#includes "../b.hpp"
#includes "a.hpp" // won't be included due to multiple inclusion prevention
namspace foo
{
class C
{
}
}
#endif
Run Code Online (Sandbox Code Playgroud)
在最后一个头文件中,由于多个包含预处理器保护,因此不会包含a.hpp.真的,这应该没问题,因为类在不同的命名空间中.我意识到,简单的方法是只更改foo/a.hpp的名称或者只是在多重包含守护中给它一个假名.有没有更好的办法?
编辑 我理解你可以通过在#define和#ifndef指令中使用更具描述性的名称来解决这个问题(例如FOO_A_HPP和BLAH_A_HPP),但我想知道这是推荐的还是最好的方法.有些人会建议使用不同的文件名作为更好的解决方案,还是不重要?你会建议使用这个约定: …
我想用C++编写一个函数来替换C的sscanf,它将匹配分配给迭代器.
基本上,我想要的东西:
string s = "0.5 6 hello";
std::vector<boost::any> any_vector;
sscanv(s, "%f %i %s", any_vector);
cout << "float: " << any_cast<float>(any_vector[0]);
cout << "integer: " << any_cast<integer(any_vector[1]);
cout << "string: " << any_cast<string>(any_vector[2]);
Run Code Online (Sandbox Code Playgroud)
确切的细节可能会有所不同,但你明白了.任何实施的想法?
到目前为止的选项以及目前的问题:
有人知道在 Java 中列出当前打开的文件描述符的方法以及打开文件描述符的数量限制吗?
迄今为止我发现的最好的是https://gist.github.com/jtai/5408684,它可以让我打印 Unix FD 系统最大值以及当前打开描述符的数量。我还没有找到一种纯 Java 方式来列出实际打开的文件的路径/名称。我还没有找到一种纯 Java 方法来列出每个进程对打开文件描述符数量的限制。
我主要对 Solaris 和 Linux 平台感兴趣,但纯 java 比必须执行某些东西要好。我知道我可以使用 pfiles(在 Solaris 上)、lsof(在 Linux 上)和 ulimit(在两者上),但我正在寻找更好的东西。
编辑 1:我主要关心当前进程/jvm 的打开描述符的数量以及该 jvm 的限制。系统范围的统计数据和限制也是一个加分项。
我想根据当前标准和C++ 0x以及实际情况(一般来说,在我的情况下使用gcc 4.5.1)总结C++中的线程安全.
对于STL容器,我的理解是根据当前标准不保证线程安全.虽然在实践中它们对于单个作者,多个读者使用(在gcc和可能是大多数现代编译器上)是线程安全的,但这是真的吗?这是由C++ 11保证的吗?
POD类型怎么样?我知道标准保证什么都没有,但我被告知在实践中,所有这些都是读写的线程安全.当然,即使是像增量运算符那样简单的东西仍然需要同步,因为可能存在多次读取和写入.
我主要对答案感兴趣,但是为什么答案背后的原因会受到赞赏.
有没有办法让gcc在打印当前目录下编译的文件中发现的错误时使用绝对路径?
例如,当打印错误时,以下内容会执行我想要的操作:
g++ -I. -I../../.. /home/some/path/somefile.cpp
Run Code Online (Sandbox Code Playgroud)
但我想通过类似的东西来实现同样的目标:
g++ -I. -I../../.. somefile.cpp
Run Code Online (Sandbox Code Playgroud)
我希望警告和错误的格式如下:
/home/some/path/somefile.cpp:299:52: warning: some warning
Run Code Online (Sandbox Code Playgroud)