小编Tal*_*lin的帖子

将一个cmake项目嵌入另一个项目中?

我有两个项目,都使用CMake.现在我想将其中一个项目作为一个库包含在另一个项目中,同时仍然保持将它们编译为独立项目的能力.

到目前为止我所做的是:使用版本控制系统在父项目的子目录中克隆子项目的副本.我已经使用"add_subdirectory"将子项目的CMakeLists.txt包含到父项目中.我通过重命名子项目中的一些目标来修复目标之间的名称冲突.

但是,我遇到的一个问题是子项目中的各种配置测试似乎没有运行.例如,子项目使用FindThreads模块来确定可用的同步基元.父项目不知道线程问题,因此没有任何与此相关的测试.类似地,子项目对标题进行了各种测试,父项目不需要这些测试.这些测试似乎都没有运行,并且这些测试定义的符号没有添加到CMakeCache.txt文件中.

我真的不想将所有子项目的测试(主要处理与父项无关的平台特定问题)提升到父项目的CMakeLists.txt中.

cmake

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

cmake:与add_custom_command依赖关系挣扎

我正在尝试将add_custom_command在一个目录中生成的文件作为另一个目录中add_custom_command的依赖项.

在第一个目录(lib/core)中,我有一个如下所示的构建命令:

add_custom_command(
    OUTPUT libcore.bc
    COMMAND tartln -filetype=bc -link-as-library -o libcore.bc ${STDLIB_BC_FILES}
    DEPENDS ${STDLIB_BC_FILES} tartln
    COMMENT "Linking libcore.bc")
Run Code Online (Sandbox Code Playgroud)

在第二个目录中,我有一个使用该命令输出的命令:

add_custom_command(OUTPUT ${OBJ_FILE}
    COMMAND tartln -disable-fp-elim -filetype=obj -o ${OBJ_FILE} ${BC_FILE}
        "${PROJECT_BINARY_DIR}/lib/core/libcore.bc"
    MAIN_DEPENDENCY "${BC_FILE}" 
    DEPENDS "${PROJECT_BINARY_DIR}/lib/core/libcore.bc"
    COMMENT "Linking Tart bitcode file ${BC_FILE}")
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试构建时,我收到以下错误:

make[3]: *** No rule to make target `lib/core/libcore.bc', needed by `test/stdlib/ReflectionTest.o'.  Stop.
Run Code Online (Sandbox Code Playgroud)

我看到的一个奇怪的事情是错误消息中的路径是相对路径,而不是绝对路径,尽管我知道$ {PROJECT_BINARY_DIR}是一个完整,正确的路径.我不知道这是一个问题还是只是一个奇怪的制作.

我还尝试在lib/core目录中为libcore库创建一个顶级目标:

add_custom_target(libcore DEPENDS libcore.bc libcore.deps)
Run Code Online (Sandbox Code Playgroud)

然后在DEPENDS子句中使用它.奇怪的是,它是第一次执行干净构建时工作,但在任何后续构建时都会出错.在任何情况下,我的理解是DEPENDS仅适用于文件依赖,因此这似乎不是正确的解决方案.(你如何拥有一个依赖于顶级目标的自定义命令?)

我也试过把绝对路径放到各处,没有效果.

cmake

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

如何覆盖类中定义的枚举的std :: hash?

我有一个在类中定义的枚举类型,我想创建这些对象的unordered_set作为类的成员:

#include <unordered_set>

class Foo {
public:
  enum Bar {
    SOME_VALUE
  };

  // Error: implicit instantiation of std::hash
  std::unordered_set<Bar> getValues() const {
     return _values;
  }

private:
  std::unordered_set<Bar> _values;
};
Run Code Online (Sandbox Code Playgroud)

现在,我知道明显的答案是在unordered_set中添加自定义哈希函数:

std::unordered_set<Bar, BarHasher>
Run Code Online (Sandbox Code Playgroud)

但是,我想知道的是,是否有一种方法可以为bar枚举专门化std :: hash,这样任何使用unordered_map的人都会自动获得散列行为.

这适用于所有其他数据类型,但不适用于枚举 - 因为枚举不能向前声明.

为了使它工作,我必须在枚举定义之后放置std :: hash的定义,但是在第一次使用之前,这意味着我必须将它放在类主体的中间,这赢得了不行.

c++ stl unordered-set c++11

10
推荐指数
1
解决办法
1279
查看次数

有没有办法在webpack 2中禁用树摇动?

在webpack 2中是否有一种方法可以禁用树抖动,还是恢复到babel处理导入的webpack 1行为?我有一个似乎是webpack中的错误,但它只是随机发生(不是100%可重现),我想恢复旧的行为,看看问题是否消失.

我看到的错误是我在node_modules中导入模块的错误,有时结果符号是未定义的.例如:

import { withRouter } from 'react-router';
Run Code Online (Sandbox Code Playgroud)

值'withRouter'未定义,但仅在一个模块中.奇怪的是,这只发生在初始构建中,如果我进行增量构建,一切正常.

请注意,{ modules: true }babel的设置不起作用 - 它只会导致webpack报告错误.

在我了解更多信息之前,我不想将此文件作为错误提交.而且因为这只发生在一个大项目中成千上万的一个符号中,我怀疑我能做一个小的repro案例.

编辑:我创建了一个可以重现问题的极简主义示例:

https://github.com/viridia/webpack-miscompile

webpack webpack-2

7
推荐指数
1
解决办法
745
查看次数

在PyDev中使用协议缓冲区时导入的未定义变量

我有一个使用协议缓冲区的PyDev项目.协议缓冲区文件位于protoc编译器生成的zip文件中.当我运行程序时,一切都有效,但是PyDev会为每个枚举常量报告"导入的未定义变量".例如:

import model_pb2

value = model_pb2.Expression(type = model_pb2.Expression.PARAMETER)
Run Code Online (Sandbox Code Playgroud)

它将枚举常量"PARAMETER"报告为未定义的变量.我的程序中有几十个类似的错误,我想"正确"修复它们(即不是简单地抑制警告.)

python eclipse pydev protocol-buffers

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

为了确保C ++类型为POD,必须遵循哪些规则?

可能重复:
C ++中的POD类型是什么?

什么是聚合和POD,它们为何/为什么特别?

我正在用C ++写一个解释器,我想确保某些C ++数据类型在通过解释的代码访问时(尤其是在使用反射时)具有可预测的布局。因此,例如,我想确保第一个数据字段始终与对象地址的偏移量为零。现在,这对于纯POD类型来说是微不足道的。但是,我想知道这是否还可以用于具有继承或构造函数的对象,只要我避免使用虚函数或多重继承之类的明显东西即可。是否合理地假设编译器将以与C编译器相同的方式布局这些类型,还是我需要担心C ++标准中的“未指定行为”?

c++ compiler-construction standards inheritance pod

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

如何使用React组件和es6类继承

我正在尝试子类化React组件,并且没有调用我的重写方法:

class Foo extends React.Component {
  someMethod() { ... }

  render() {
    return <div>{this.someMethod()}</div>;
  }
}

class Bar extends Foo {
  someMethod() {
    // Never gets called
  }
}
Run Code Online (Sandbox Code Playgroud)

事实上,当我<Bar />在我的DOM中渲染一个并查看调试器中的组件时,它会将组件类型显示为"Foo".

(另外,请注意我熟悉有关组合与继承的所有论据.相信我,继承确实是我特定用例的正确答案,所以我们不要开始这个论点.)

(另外,我知道潜在的重复问题#27233491,但那里给出的解决方案实际上似乎并不适用于我.)

更新:

我在CodePen上看到了@Aaron的例子,展示了它是如何工作的,但我在我的应用程序中看到了不同的行为.特别:

class Foo extends React.Component {
  render() {
    console.log(this); // Always prints 'Foo...'.
    return <div></div>
  }
}

class Bar extends Foo {
  render() {
    console.log(this); // Always prints 'Bar...'.
    return super.render();
  }
}
Run Code Online (Sandbox Code Playgroud)

我在渲染Bar时在开发控制台上看到的是:

> Bar { props: ...etc. }
> Foo …
Run Code Online (Sandbox Code Playgroud)

inheritance ecmascript-6 reactjs

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

一般处理枚举的Scala类

我想创建一个包含枚举值的泛型类,并且还允许访问枚举的可能值.例如,可以考虑属性编辑器 - 您需要知道属性的当前值,并且还需要能够知道属性的其他值是合法的.并且不应提前知道枚举的类型,您应该能够使用任何类型的枚举.

我的第一个想法是这样的:

class EnumerationProperty[T <: Enumeration](value:T)
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,因为对于枚举T不是类型,它是一个对象.我尝试过的其他变化是:

class EnumerationProperty[T <: Enumeration](value:T.Value)
class EnumerationProperty[T <: Enumeration.Value](value:T)
Run Code Online (Sandbox Code Playgroud)

(我不会详细说明为什么这些不起作用,因为我怀疑原因并不有趣.)

generics parameters enums types scala

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