小编Gru*_*bel的帖子

从`cmake`使用`pkg-config`的正确方法是什么?

在网上四处看看我看到了很多这样的代码:

include(FindPkgConfig)
pkg_search_module(SDL2 REQUIRED sdl2)

target_include_directories(app SYSTEM PUBLIC ${SDL2_INCLUDE_DIRS}
target_link_libraries(app ${SDL2_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)

然而,这似乎是错误的方式,因为它只使用包含目录和库,但忽略了定义,库路径和可能返回的其他标志pkg-config.

这样做的正确方法是什么,并确保编译后pkg-config使用的所有编译和链接标志都被使用app?是否有一个命令来实现这一点,即类似的东西target_use(app SDL2)

pkg-config cmake

61
推荐指数
4
解决办法
4万
查看次数

如何包含TR1?

不同的编译器似乎对TR1有不同的看法.G ++似乎只接受包含的类型:

#include <tr1/unordered_map>
#include <tr1/memory>
...
Run Code Online (Sandbox Code Playgroud)

虽然微软编译器只接受:

#include <unordered_map>
#include <memory>
...
Run Code Online (Sandbox Code Playgroud)

至于我理解TR1,微软的方式是正确的.

有没有办法让G ++接受第二个版本?一般人如何以便携方式处理TR1?

c++ portability tr1 include c++11

28
推荐指数
2
解决办法
3万
查看次数

如何加入阻塞IO的线程?

我有一个在后台运行的线程,它以阻塞的方式从输入设备读取事件,现在当我退出应用程序时我想正确地清理线程,但是我不能只运行pthread_join()因为线程由于阻塞IO,它永远不会退出.

我该如何正确解决这种情况?我应该发送pthread_kill(theard,SIGIO)还是pthread_kill(theard,SIGALRM)来打破阻塞?是其中任何一个甚至是正确的信号?或者有另一种方法来解决这种情况,并让该子线程退出阻塞读取?

目前有点困惑,因为我的谷歌搜索没有找到解决方案.

这是在Linux上并使用pthreads.

编辑:我用SIGIO和SIGALRM玩了一下,当我没有安装信号处理程序时他们打破了阻塞IO,但在控制台上给出了一条消息("I/O可能")但是当我安装一个信号处理程序时,为了避免该消息,它们不再破坏阻塞IO,因此线程不会终止.所以我回到了第一步.

c linux multithreading pthreads

27
推荐指数
5
解决办法
2万
查看次数

使用boost :: program_options时,如何设置参数的名称?

使用时boost::program_options,如何设置参数名称boost::program_options::value<>()

#include <iostream>
#include <boost/program_options.hpp>

int main()
{
  boost::program_options::options_description desc;

  desc.add_options()
    ("width", boost::program_options::value<int>(),
     "Give width");

  std::cout << desc << std::endl;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码给出:

  --width arg           Give width
Run Code Online (Sandbox Code Playgroud)

我想要的是arg用更具描述性的名称替换名称NUM:

  --width NUM           Give width
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-program-options

22
推荐指数
3
解决办法
6281
查看次数

如何复制Makefile中的目录?

我有一个目录images/,我想build/images/从Makefile中复制到.该目录可能包含多个级别的子目录.最优雅的方式是什么?我想要:

  • 避免每次make运行时都有完整的目录副本(即没有cp -r)
  • 保证一致性(即如果文件中的文件更改images/应自动更新build/images/)
  • 避免为Makefile中的每个图像和每个子目录指定规则
  • 解决问题make,所以没有rsynccp -u如果可能的话

我正在使用GNU make,因此允许GNU特定的东西.

directory makefile gnu-make

21
推荐指数
1
解决办法
2万
查看次数

如何优化SCons脚本的启动时间?

我有一个SCons脚本需要大约10秒才发现没有什么需要重建,这对于本质上相当小的项目感觉非常长.阅读SConscript本身只花了一两秒钟,大部分时间花在:

scons: Building targets ...
Run Code Online (Sandbox Code Playgroud)

步.

我怎样才能知道此时究竟scons在做什么?还有什么其他一般建议可以写快速SCons脚本?

build-automation build-process scons

20
推荐指数
6
解决办法
1万
查看次数

在Gtk +中绘制图像的最快方法是什么?

我有一个图像/ pixbuf,我想绘制到gtk.DrawingArea并经常刷新,所以blitting操作必须快.这样做很简单:

def __init__(self):
  self.drawing_area = gtk.DrawingArea()
  self.image = gtk.gdk.pixbuf_new_from_file("image.png")

def area_expose_cb(self, area, event):
  self.drawing_area.window.draw_pixbuf(self.gc, self.image, 0, 0, x, y)
Run Code Online (Sandbox Code Playgroud)

然而,导致性能非常慢,可能是由于pixbuf不是显示器颜色格式.

我也没有在开罗取得成功,因为它似乎仅限于24/32位格式,并且没有16位格式(FORMAT_RGB16_565不受支持和弃用).

在Gtk +中快速绘制图片有哪些替代方案?

python gtk pygtk cairo

8
推荐指数
1
解决办法
3446
查看次数

如何在交互模式下跳过`if __name__ =="__ main __"`

给出一个简单的脚本:

#!/usr/bin/env python3

if __name__ == "__main__":
    print("Hello World")
Run Code Online (Sandbox Code Playgroud)

如何在不执行if __name__ == "__main__":块的情况下将其加载到交互式解释器中?默认情况下会执行:

$ python3 -i simple-script.py
Hello World
>>> ?
Run Code Online (Sandbox Code Playgroud)

python python-3.x

3
推荐指数
2
解决办法
672
查看次数