小编mat*_*ias的帖子

将CMake与setup.py一起使用

对于一个项目,我构建了一个C库,并使用CMake隐藏了Python绑定(通过GObject内省).我还想使用distutils分发一些Python辅助模块.我可以用这个来构建和安装模块CMakeLists.txt

find_program(PYTHON "python")

if (PYTHON)
    set(SETUP_PY_IN "${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in")
    set(SETUP_PY    "${CMAKE_CURRENT_BINARY_DIR}/setup.py")
    set(DEPS        "${CMAKE_CURRENT_SOURCE_DIR}/module/__init__.py")
    set(OUTPUT      "${CMAKE_CURRENT_BINARY_DIR}/build")

    configure_file(${SETUP_PY_IN} ${SETUP_PY})

    add_custom_command(OUTPUT ${OUTPUT}
                       COMMAND ${PYTHON}
                       ARGS setup.py build
                       DEPENDS ${DEPS})

    add_custom_target(target ALL DEPENDS ${OUTPUT})

    install(CODE "execute_process(COMMAND ${PYTHON} ${SETUP_PY} install)")
endif()
Run Code Online (Sandbox Code Playgroud)

以下内容setup.py.in:

from distutils.core import setup, Extension

if __name__ == '__main__':
    setup(name='foo',
          version='${PACKAGE_VERSION}',
          package_dir={ '': '${CMAKE_CURRENT_SOURCE_DIR}' },
          packages=['module'])
Run Code Online (Sandbox Code Playgroud)

不幸的是,每次运行时都会执行构建步骤make.我猜,问题与自定义命令的输出有关,该命令是目录而不是文件.现在,有没有办法告诉CMake python setup.py build只在setup.py.in其中一个来源发生变化时运行?

distutils cmake setup.py

16
推荐指数
1
解决办法
5625
查看次数

如何正确折叠Vim中的GNU C样式函数?

在编写C代码时,我使用了GNUK&R风格的混合体.这意味着函数的返回值,每个参数和开放体大括号都在它自己的行上.我也想使用Vim的折叠功能,但foldmethod=syntax折叠看起来像这样:

坏折

是否有可能在折叠摘要中看到函数名称而没有任何特殊的折叠标记或foldexprs?

vim folding

15
推荐指数
1
解决办法
1056
查看次数

如何防止Waf重命​​名目标文件?

我正在使用Waf构建一个C项目并gcov获得一些测试代码覆盖率.但是,Waf gcc以一种foo.c.1.o从源文件生成的方式调用,在搜索生成的文件时会产生foo.c混淆gcov:

$ gcov foo.c
$ foo.gcno:cannot open graph file
Run Code Online (Sandbox Code Playgroud)

幸运的是,gcov有一个-o选项可以指定相应的目标文件.然而,这不方便,执行lcov仍然失败.因此,我的问题是:

  1. 为什么Waf重命​​名对象文件?
  2. 如何禁用此行为或......
  3. 如何gcov/ lcov解决这个问题?

c waf gcov

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

使用 serde_json 反序列化 JSON 根数组

根据 JSON 规范,JSON 文档的根可以是对象,也可以是数组。第一种情况很容易通过serde_json使用反序列化struct

#[derive(Deserialize)]
struct Person {
    first_name: String,
    last_name: String,
}

fn main() {
    let s = r#"[{"first_name": "John", "last_name": "Doe"}]"#;

    // this will break because we have a top-level array
    let p: Person = serde_json::from_str(s).unwrap();
    println!("Name: {} {}", p.first_name, p.last_name);
}
Run Code Online (Sandbox Code Playgroud)

但是我找不到任何有关如何反序列化(未命名)数组的文档struct

json rust serde

4
推荐指数
1
解决办法
3695
查看次数

在Gtk中,每棵树视图行可以有一个单元格渲染器吗?

在Gtk +中,每列可能有多个单元格渲染器,但是我想在不同的行中具有不同的单元格渲染器。例如,我想在树形视图中列出对象的属性。对于布尔属性,使用切换按钮比编辑GtkCellRendererText和在TRUE或中键入要简单得多FALSE

我知道我可以通过设置回调来对行数据做出反应gtk_tree_view_column_set_cell_data_func()。但是在回调中,单元格渲染器已经修复,我只能更改其外观。

编辑: ptomato指出了如何在Vala中完成此操作。我获取了这些信息,并构建了一个基于C的单元格渲染器,该渲染器采用GObject和列表存储(假设第一列包含属性名称)来显示一个自定义单元格,具体取决于属性的类型。我还对树视图小部件进行了子类化,将其结合起来以便于使用。这两个组件都可以在Github上找到。

c gtk

3
推荐指数
1
解决办法
1129
查看次数

限制AMD OpenCL的GPU数量

是否有解决方案来限制AMD OpenCL平台使用的GPU数量?对于NVIDIA平台,可以简单地设置环境变量CUDA_VISIBLE_DEVICES以限制OpenCL可用的GPU集.

编辑:我知道,我可以用一组减少的设备创建一个上下文.不过,我正在寻找方法来控制设备的数量从"外部"的OpenCL平台.

opencl

3
推荐指数
1
解决办法
1185
查看次数

标签 统计

c ×2

cmake ×1

distutils ×1

folding ×1

gcov ×1

gtk ×1

json ×1

opencl ×1

rust ×1

serde ×1

setup.py ×1

vim ×1

waf ×1