小编vpr*_*eep的帖子

cmake add_custom_command发出多个输出文件

我在使用add_custom_command多个输出文件时注意到cmake中可能存在的错误行为.我已经能够将问题隔离到一个最小的例子(见下文).似乎当我在my中指定了两个输出文件时add_custom_command,在某些情况下,第二个输出文件的上游依赖项没有被正确跟踪.该cmake的文件明确指出了多个输出文件是允许的.这里有趣的是,交换输出文件的顺序会导致不同的行为,这表明第一个OUTPUT文件的处理方式不同.

请参阅以下展示此行为的玩具示例.第一次调用make运行得很好.触摸后a.txt,Copying baz.cpp to baz2.cpp规则不会在第一次调用时执行make,而是在第二次调用时运行make.这意味着一次调用后构建仍然是陈旧的make.注意在改变输出的顺序,这个问题被固定add_custom_commandOUTPUT baz.cpp bar.cpp

Example CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)

add_library(mybaz baz.cpp)

add_custom_command(
  OUTPUT  baz2.cpp
  COMMAND cp baz.cpp baz2.cpp
  DEPENDS baz.cpp
  COMMENT "Copying baz.cpp to baz2.cpp")

add_custom_target(mytarget
  DEPENDS baz2.cpp
  COMMENT "Running mytarget")

add_dependencies(mybaz mytarget)

add_custom_command(
  OUTPUT  bar.cpp baz.cpp
  COMMAND cat a.txt > bar.cpp
  COMMAND cat a.txt > baz.cpp
  DEPENDS a.txt
  COMMENT "Generating bar.cpp and baz.cpp")
Run Code Online (Sandbox Code Playgroud)

以下是我运行的命令:

> touch …
Run Code Online (Sandbox Code Playgroud)

c++ cmake

13
推荐指数
1
解决办法
6126
查看次数

xvfb(使用 Mesa 19.2)与 Vulkan 兼容吗?

我正在尝试通过xvfb在无头 Ubuntu 19.10 虚拟机上运行基于 Vulkan 的图形应用程序。

从裸 Ubuntu 19.10 映像(使用lxc创建)开始,我按如下方式准备机器:

> sudo apt update
> sudo apt install -y xvfb mesa-vulkan-drivers vulkan-tools
Run Code Online (Sandbox Code Playgroud)

然后我运行以下两个命令:

在终端 1:启动 XVFB

Xvfb :1 -screen 0 1024x768x24
Run Code Online (Sandbox Code Playgroud)

在终端 2:运行 vulkaninfo

> DISPLAY=:1 vulkaninfo 
==========
VULKANINFO
==========

Vulkan Instance Version: 1.1.114

/build/vulkan-tools-IZAxVX/vulkan-tools-1.1.114.0+dfsg1/vulkaninfo/vulkaninfo.c:5884: 
failed with VK_ERROR_INITIALIZATION_FAILED
Run Code Online (Sandbox Code Playgroud)

(运行我自己的自定义 Vulkan 应用程序会产生类似的失败。)

据我了解,Xvfb 依赖于台面,而我使用的是台面 19.2.1

而且,根据Mesa 19.2.1 发行说明,它应该支持 Vulkan:

“Mesa 19.2.1 实现了 Vulkan 1.1 API,但 VkPhysicalDeviceProperties 结构的 apiVersion 属性报告的版本取决于所使用的特定驱动程序。”

问题:期望 vulkan 应用程序可以在 Ubuntu 19.10 …

mesa xvfb vulkan

7
推荐指数
0
解决办法
481
查看次数

通过模板发出C++ Eigen :: Matrix类型的问题

我正在写上型模板(或者C++函数floatdouble),并使用Eigen::Matrix内部.该函数将被使用的组合float,double和模板类型Eigen:Matrix的对象. Eigen::Matrix<>::cast()作品只是罚款doublefloat,虽然我与模板类型使用时打一个奇怪的问题.见下面的代码:

#include "Eigen/Core"  // Version 3.2.4 (eigen-eigen-10219c95fe65)

template <typename Scalar>
void Foo() {
  Eigen::Matrix<double, 3, 1> mat_d = Eigen::Matrix<double, 3, 1>::Zero();
  Eigen::Matrix<float,  3, 1> mat_f = Eigen::Matrix<float,  3, 1>::Zero();
  Eigen::Matrix<Scalar, 3, 1> mat_s = Eigen::Matrix<Scalar, 3, 1>::Zero();

  mat_d = mat_f.cast<double>();  // Works
  mat_f = mat_f.cast<float>();   // Works

  mat_s = mat_f.cast<Scalar>();  // Works
  mat_s = mat_d.cast<Scalar>();  // Works

  mat_d = mat_s.cast<double>();  // Broken …
Run Code Online (Sandbox Code Playgroud)

c++ templates eigen eigen3

5
推荐指数
1
解决办法
2171
查看次数

标签 统计

c++ ×2

cmake ×1

eigen ×1

eigen3 ×1

mesa ×1

templates ×1

vulkan ×1

xvfb ×1