我有一个C++项目,它使用CMake作为它的构建系统.我想要以下行为:
如果调用cmake cmake ..,CMAKE_CXX_FLAGS则为-O3 -Wall -Wextra
如果调用cmake cmake .. -DCMAKE_BUILD_TYPE=Debug,CMAKE_CXX_FLAGS则为-g -Wall -Wextra
我尝试了以下内容
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
set(CMAKE_CXX_FLAGS "-O3 -Wall -Wextra")
set(CMAKE_CXX_FLAGS_DEBUG "-g -Wall -Wextra")
Run Code Online (Sandbox Code Playgroud)
但这有一个很大的问题.首先,如果使用第二次调用,则将两者-O3和-g标志传递给编译器.此外,如果我使用第二次调用和之后的第一次调用,虽然没有明确排序,但CMAKE_BUILD_TYPE仍然保留Debug- 所以我得到一个Debug构建,尽管我想要一个优化的构建.
为什么?我该怎么做才能获得理想的行为?
在C中,我们经常需要运行这样的代码
if (! somefun(x, y, z)) {
perror("somefun")
}
Run Code Online (Sandbox Code Playgroud)
是否可以创建一个宏,使用如下:
#define chkerr ...
chkerr(somefun(x, y, z));
Run Code Online (Sandbox Code Playgroud)
会编译到上面吗?
我已经知道我可以使用__VA_ARGS__宏了,但这需要我称之为
chkerr(somefun, x, y, z)
Run Code Online (Sandbox Code Playgroud) 让我们考虑以下程序,它计算参数的无符号平方:
.global foo
.text
foo:
mov %rdi, %rax
mul %rdi
ret
Run Code Online (Sandbox Code Playgroud)
这是由适当编译as,但反汇编
0000000000000000 <foo>:
0: 48 89 f8 mov %rdi,%rax
3: 48 f7 e7 mul %rdi
6: c3 retq
Run Code Online (Sandbox Code Playgroud)
有什么区别ret和retq?
根据这篇文章,直观播种std::random_device可能不会产生预期的结果.特别是,如果使用Mersenne Twister引擎,则不能达到所有初始化状态.使用seed_seq也不会帮助,因为它不是双射.
据我所知,这一切意味着std::uniform_int_distribution并非真正的统一 - 因为并非所有的种子价值都是可能的.
我想简单地生成几个随机数.虽然这是一个非常有趣的话题,我肯定会把我的一些空闲时间用在一起,但很多人可能没有这种可能性.
所以问题是:我应该如何正确地播种,std::default_random_engine以便它完全符合我的期望?
我有这个信号
class SystemUICfgScanner
{
/*code here*/
signals:
void error(QString desc);
/*more code*/
};
Run Code Online (Sandbox Code Playgroud)
在QML中,我使用InfoBanner:
InfoBanner
{
property string infodetails: ""
id: systemuicfgErrorBanner
text: "Error: " + infodetails
Connections
{
target: cfgScanner
onError: infodetails = desc
}
}
Run Code Online (Sandbox Code Playgroud)
当发出错误(QString)信号时,我收到此错误
Invalid write to global property "infodetails"
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
提前致谢
我希望在元素变得可见时绘制动画(应该是平滑的,而不是整体)
我试过这个
states: State
{
name: "iconOff"
when: iconOnSwitch.checked == false
PropertyChanges { target: selectIconRow; visible: false }
}
transitions: Transition
{
reversible: true
from: ""
to: "iconOff"
PropertyAnimation
{
properties: "x,y,visible"
easing.type: Easing.InOutQuad
from: selectIconRow
property: "visible"
}
}
Run Code Online (Sandbox Code Playgroud)
但selectIconRow仍然会立即出现
我该如何使用这样的动画?
我可以for .. in使用初始化程序列表轻松模拟循环以进行读取访问
std::list<int> foo, bar, baz;
int main()
{
foo.push_back(3);
foo.push_back(2);
bar.push_back(1);
for (auto &x : {foo, bar, baz}) {
// x.push_back(42);
std::cout << x.size() << std::endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这打印:
2
1
0
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能修改实际对象,就像在注释行中一样:
// x.push_back(42);
Run Code Online (Sandbox Code Playgroud) 我创建了一个ListView,它显示了用户定义的几页内容(纯文本).显示的页面是委托.一次只能看到一个页面.我决定使用它来捕捉到一个项目,就像iOS'启动器的工作原理一样.用户只需在页面之间轻弹即可.(这将用于触摸屏)
我需要有一些操作的当前显示页面的索引.ListView的currentIndex始终保持== 0.我怎样才能得到它?
对于喜欢代码的人:
ListView
{
onCurrentIndexChanged: console.log(currentIndex) // this gets called only once - at startup
delegate: Column
{
// The page displayed, only one page at a time
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢
我喜欢在我的C应用程序中使用GLib,它使用CMake作为构建系统.
现在,我在某种程度上混淆了如何在我的CMakeLists.txt中启用GLib.基本上,你使用find_package命令在cmake中添加库,所以我尝试了,根据这个 bug报告
find_package(GLib2)
Run Code Online (Sandbox Code Playgroud)
但没有找到任何东西.pkg-config另一方面,建议在GLib文档中使用.
在基于cmake的项目中启用glib的推荐方法是什么?
我编译了以下程序:
#include <stdint.h>
uint64_t usquare(uint32_t x) {
return (uint64_t)x * (uint64_t)x;
}
Run Code Online (Sandbox Code Playgroud)
这拆解为:
0: 89 f8 mov eax,edi
2: 48 0f af c0 imul rax,rax
6: c3 ret
Run Code Online (Sandbox Code Playgroud)
但是imul用于乘以有符号数字的指令.那为什么用gcc呢?
/ edit:使用uint64_t程序集时类似:
0: 48 0f af ff imul rdi,rdi
4: 48 89 f8 mov rax,rdi
7: c3 ret
Run Code Online (Sandbox Code Playgroud)