我正在使用CMake构建一个大型库,我希望用户能够有选择地启用/禁用构建过程的某些部分.
如何将命令行选项添加到我的CMake构建中,例如,以便用户可以键入类似的内容cmake --build-partone --nobuild-parttwo --dothis=true --dothat=false ..?
显然,OPTION关键字将创建可以从CMake GUI设置的变量,但我无法从命令行中弄清楚如何执行此操作.
我有一个cmake构建,我正在搜索一堆依赖项,即我有很多实例:
FIND_PACKAGE(SomePackage)
if(SOMEPACKAGE_FOUND)
include_directories(${SOMEPACKAGE_INCLUDE_DIR})
link_libraries(${SOMEPACKAGE_LIBRARIES})
endif(SOMEPACKAGE_FOUND)
Run Code Online (Sandbox Code Playgroud)
现在,我想添加一个自定义命令来构建一个预编译的头文件,但要做到这一点,我需要知道我的include_directories调用添加的所有路径.如何获取这些目录的列表(最好使用正确的-I/path/to/directory格式),以便我可以将它们添加到我的自定义命令中?
为什么st_ :: initializer_list <_E> :: size在static_assert中是不允许的,即使它在我的libstdc ++(v.4.6)中被声明为constexpr?
例如,以下代码:
template<class T, int Length>
class Point
{
public:
Point(std::initializer_list<T> init)
{
static_assert(init.size() == Length, "Wrong number of dimensions");
}
};
int main()
{
Point<int, 3> q({1,2,3});
return 0;
}
Run Code Online (Sandbox Code Playgroud)
给出以下错误:
test.C: In constructor ‘Point<T, Length>::Point(std::initializer_list<_Tp>) [with T = int, int Length = 3]’:
test.C:60:26: instantiated from here
test.C:54:7: error: non-constant condition for static assertion
test.C:54:73: in constexpr expansion of ‘init.std::initializer_list<_E>::size [with _E = int, std::initializer_list<_E>::size_type = long unsigned int]()’
test.C:54:7: error: ‘init’ …Run Code Online (Sandbox Code Playgroud) 我正在尝试开始使用Paramiko库,但是当我尝试连接以下简单程序时,库就会抛出异常:
import paramiko
ssh = paramiko.SSHClient()
ssh.connect('127.0.0.1', username='boatzart', password='mypassword')
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
Traceback (most recent call last):
File "test.py", line 6, in <module>
ssh.connect('127.0.0.1')
File "build/bdist.macosx-10.7-intel/egg/paramiko/client.py", line 316, in connect
File "build/bdist.macosx-10.7-intel/egg/paramiko/client.py", line 85, in missing_host_key
paramiko.SSHException: Unknown server 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
无论我尝试哪种服务器都会发生这种情况
如何使用Doxygen在C++中记录宏函数,并在我的非Evil代码的文档中引用它?
更具体地说,我在Message.H中定义了一些名为"Message"的常规类,用户可以继承它来定义自己的消息.在另一个文件("MessageHelpers.H")中,我有一个像这样的疯狂宏:
//! Users must call this macro to register their messages...
/*!
...lest they be forced to type all sorts of boring and
error-prone boiler plate code.
blah blah blah... More specific documentation and explanation...
*/
#define REGISTER_MESSAGE_TYPE(MSGTYPE) \
do_some(MSGTYPE); \
seriously(); \
crazy_stuff(MSGTYPE);
Run Code Online (Sandbox Code Playgroud)
在Message的文档中,如果短语"REGISTER_MESSAGE_TYPE"可以自动成为链接并指向我的宏文档,我会很高兴.例如
//! A cool message class
/*!
Users can inherit from this class to create their own cool messages.
Just be sure to call REGISTER_MESSAGE_TYPE after your class definition!
*/
class Message
{
virtual void …Run Code Online (Sandbox Code Playgroud) 我正在使用linux中的gcc4.6在C++(0X)中创建一个相当大的库.我的库很大程度上依赖于模板类,导致使用该库的应用程序的编译时间很长.我想通过提供最糟糕的违规类型/方法的明确实例来开始加快速度.
有没有办法让gcc报告编译各种类型/方法所花费的时间,以便我可以以原则方式应用我的显式实例,而不是通过直觉?
我开始使用PSP Homebrew时遇到了一些麻烦.我购买了PSP 1001型号并成功入侵了它,但我在获取有关如何开始创建自定义自制程序应用程序的一些信息时遇到了一些麻烦.
我想创建一个模仿'TV-B-Gone'的应用程序 - 基本上,它只是通过每个代码来关闭或打开电视,并通过1000型号上的IR接收器输出代码.
我发现你可以使用Javascript的信息,但是没有获得任何真正的本机函数,Actionscript,Lua和C/C++.我知道C和C++,两者显然都能够访问硬件的各个方面.
我想知道是否有人会就如何创建自制应用程序提出任何建议.我已经创建了一些C++/C应用程序,但是我能够将它们放到我的PSP上,还是我需要经历一个sdk或协议?
我已经做了一些环顾四周,人们推荐的所有网站都有几年的历史了,现在大多数都是由不同的人拥有,不再提供教程了.
另外,有人知道如何通过PSP上的IR收发器对传输进行编码吗?
非常感谢大家,我知道这是一个很老的话题,目前没有多少人在研究,所以任何帮助都会受到赞赏.
TL:DR - 有没有人知道在C++或C中启动PSP自制应用程序创建的任何好教程,有没有人知道如何用C++或C在PSP 1000上发送代码?
我正在尝试围绕dlopen()/ dlsym()编写一个C++ 0x包装器,以动态加载共享对象中的函数:
class DynamicLoader
{
public:
DynamicLoader(std::string const& filename);
template<class Signature>
std::function<Signature> load(std::string const& functionName);
private:
void *itsLibraryHandle;
};
DynamicLoader::DynamicLoader(std::string const& filename)
{
itsLibraryHandle = dlopen(filename.c_str(), RTLD_LAZY);
if(!itsLibraryHandle)
{ /* Throw Some Error */ }
}
template<class Signature>
std::function<Signature> DynamicLoader::load(std::string const& functionName)
{
return <insert magic here> dlsym(itsHandle, functionName.c_str());
}
Run Code Online (Sandbox Code Playgroud)
有没有办法将dlsym返回的void*函数指针转换为std :: function?
我正在Qt中创建一个应用程序,允许用户在QGraphicsView中拖动各种"模块".每当选择其中一个模块时,它会发出一个信号,然后由"ConfigurationWidget"拾取,这是一个侧面板,应该显示所选模块的所有相关参数:
class ConfigurationWidget : public QWidget
{
Q_OBJECT
public:
ConfigurationWidget(QWidget *parent) : QWidget(parent) {}
public slots:
void moduleSelected(Module* m)
{
if(layout())
{
while (itsLayout->count()>0)
{
delete itsLayout->takeAt(0);
}
}
delete layout();
itsLayout = new QFormLayout(this);
itsLayout->addRow(QString(tr("Type:")), new QLabel(m->name()));
itsLayout->addRow(QString(tr("Instance:")), new QLabel(m->instanceID()));
// ... Display a whole bunch of other fields that depends on the module
}
};
Run Code Online (Sandbox Code Playgroud)
问题是当选择模块时,ConfigurationWidget实际上永远不会被清除.新字段只是绘制在旧字段上.我尝试过hide()和show(),invalidate(),update()等各种组合无济于事.
制作可以动态改变其字段的小部件的正确方法是什么?
我需要在一个非主要的线程中执行()一个QApplication(我的GUI必须是可以在运行时动态加载和卸载的插件,因此我无法访问主线程).有没有人知道(相对)无痛的方式来破解Qt限制在主要之外启动QApplication?
我正在使用gcc4.3.4在C++中用Qt4开发Linux.