小编Bli*_*ard的帖子

使用cmake创建主项目和子项目,并能够单独编译它们

免责声明:我是CMakeLists.txt的新手,我有一个工作实现,并希望改进和增强它,问题描述如下:

如果我想要root/sub-directories/作为单独的子项目,可以使用CMakeLists.txts他们的文件夹中的个人编译我发现自己几乎复制粘贴CMakeLists.txt每个子目录几乎整个根文件.

我想知道是否有更好的方法来拥有一个主项目,然后是从主项目获得共享依赖项的子项目,并且可以在没有cmakeroot的情况下进行编译CMakeLists.txt.我的目录结构是;

CMakeLists.txt(根项目)
| __ sub_dir-1
| __ | __ CMakeLists.txt(子项目)
| __ sub_dir-2
| __ | __ CMakeLists.txt(子项目)
| __ sub_dir-3
| __ | __ CMakeLists.txt(子项目)
......

基本上,我希望能够:

  1. cmake root/CMakeLists.txt,它创建了一个包含子项目的整个项目(我已经在子目录中使用单独的CMakeLists.txts实现了这个项目.
  2. cmake root/sub-dir/CMakeLists.txt并且编译子项目,它本质上也找到了必要的依赖项,并且可能.cmake包含或包含它们root/CMakeLists.txt.接近这种结构的最佳方法是什么?

    • 同时保留了能够将其编译为整个项目的第一个要点.
    • 而且也没有拥挤sub-dir/CMakeLists.txt太多了冗余的代码?

感谢任何建议!谢谢.

cmake

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

蓝海管道没有"构建触发器"选项

我已经研究了很多这个问题并且找不到答案,所以我之前在Jenkins上设置了一个简单的项目,我获得了"Build Triggers"选项卡的所有特权,我可以在其中选择能够触发项目构建的确切内容(例如拉请求).

但是,在Blue Ocean项目中,我只能在特定分支> View Configuration下看到这些选项,并且它不允许我保存配置的任何选项,它只显示配置而没有保存按钮.我附上了截图:

这是项目>配置,它允许我保存更改和一切,但没有选项构建触发器. 项目配置

这是在Project> Branch(master)> View Configurations下,它显示了我想要的构建触发器,但没有选项将这些更改应用到该特定分支. 分支配置

所以,我想问题是,如何将构建触发器添加到我的蓝海管道?

jenkins jenkins-pipeline jenkins-blueocean

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

对于CMakeLists.txt中的特定项目,将ctest命令替换为"ctest --output-on-failure"

我发现泛型ctest命令没有提供有关测试的大量信息,所以我想添加ctest --output-on-failure但不要让用户担心标志.我想他们只是cmake,make项目并运行CTEST,它应该运行CTEST --output-on-failure标志.是否可以在CMakeLists.txt中执行此操作?

编辑:

输出 env CTEST_OUTPUT_ON_FAILURE=1 make test

 4/13 Test  #4: TEST_SSSP ........................***Failed  Required regular expression not found.Regex=[CORRECT
]  0.00 sec
Loading Matrix-market coordinate-formatted graph ...
Input graph file /home/muhammad/gunrock/dataset/small/chesapeake.mtx does not exis
Run Code Online (Sandbox Code Playgroud)

输出 set_property(TEST TestName PROPERTY ENVIRONMENT "CTEST_OUTPUT_ON_FAILURE=1")

 4/13 Test  #4: TEST_SSSP ........................***Failed  Required regular expression not found.Regex=[CORRECT
]  0.00 sec
Run Code Online (Sandbox Code Playgroud)

旗帜set_property不起作用.

command cmake ctest

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

有条件地选择继承哪些类

所以,我有一个钻石层次结构。

class Base {
    // ...
}
    
class Derived_A : public Base {
    // ...
}
    
class Derived_B : public Base {
    // ...
}
    
class Join : public Derived_A, public Derived_B {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

根据模板变量,我想有条件地选择继承 A 和/或 B。(我理解菱形结构,A 和 B 可以虚拟继承。)我所拥有的是:

template<bool HAS_A, bool HAS_B>
class Join : public Derived_A, // enable if HAS_A
             public Derived_B  // enable if HAS_B
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用std::enable_if_t,但我不确定当它的布尔值是false.

c++ inheritance templates

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

在C++中将int映射到向量的结构

我正在努力学习如何std::map工作,我有以下问题:

int id; // stores some id

struct stuff {
  std::vector<int> As;
  std::vector<int> Bs;
} stuff;

std::map<int, stuff> smap;

void foo () {
  int count = 2;
  int foo_id = 43;
  for (int i = 0; i < count; count++) {
        stuff.As.push_back(count);
        stuff.Bs.push_back(count);
  }
  smap.insert(foo_id, stuff);
}
Run Code Online (Sandbox Code Playgroud)

目前我得到:

error: type/value mismatch at argument 2 in template parameter list for ‘template<class _Key, class _Tp, class _Compare, class _Alloc> class std::map’
  std::map<int, stuff> smap;

error: request for member ‘insert’ in …
Run Code Online (Sandbox Code Playgroud)

c++ stdmap

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