免责声明:我是CMakeLists.txt的新手,我有一个工作实现,并希望改进和增强它,问题描述如下:
如果我想要root/sub-directories/
作为单独的子项目,可以使用CMakeLists.txts
他们的文件夹中的个人编译我发现自己几乎复制粘贴CMakeLists.txt
每个子目录几乎整个根文件.
我想知道是否有更好的方法来拥有一个主项目,然后是从主项目获得共享依赖项的子项目,并且可以在没有cmake
root的情况下进行编译CMakeLists.txt
.我的目录结构是;
CMakeLists.txt(根项目)
| __ sub_dir-1
| __ | __ CMakeLists.txt(子项目)
| __ sub_dir-2
| __ | __ CMakeLists.txt(子项目)
| __ sub_dir-3
| __ | __ CMakeLists.txt(子项目)
......
基本上,我希望能够:
cmake root/CMakeLists.txt
,它创建了一个包含子项目的整个项目(我已经在子目录中使用单独的CMakeLists.txts实现了这个项目.cmake root/sub-dir/CMakeLists.txt
并且只编译子项目,它本质上也找到了必要的依赖项,并且可能.cmake
包含或包含它们root/CMakeLists.txt
.接近这种结构的最佳方法是什么?
sub-dir/CMakeLists.txt
太多了冗余的代码?感谢任何建议!谢谢.
我已经研究了很多这个问题并且找不到答案,所以我之前在Jenkins上设置了一个简单的项目,我获得了"Build Triggers"选项卡的所有特权,我可以在其中选择能够触发项目构建的确切内容(例如拉请求).
但是,在Blue Ocean项目中,我只能在特定分支> View Configuration下看到这些选项,并且它不允许我保存配置的任何选项,它只显示配置而没有保存按钮.我附上了截图:
这是项目>配置,它允许我保存更改和一切,但没有选项构建触发器.
这是在Project> Branch(master)> View Configurations下,它显示了我想要的构建触发器,但没有选项将这些更改应用到该特定分支.
所以,我想问题是,如何将构建触发器添加到我的蓝海管道?
我发现泛型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
不起作用.
所以,我有一个钻石层次结构。
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
.
我正在努力学习如何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)