小编Pet*_*ter的帖子

如何调试CMakeLists.txt文件?

CMakeLists.txt除了消息语句之外,是否有可能调试文件(至少列出变量)?

cmake

66
推荐指数
5
解决办法
4万
查看次数

不区分大小写的argparse选项

是否可以以不区分大小写的方式检查argparse选项

import argparse
choices = ["win64", "win32"]
parser = argparse.ArgumentParser()
parser.add_argument("-p", choices=choices)
print(parser.parse_args(["-p", "Win32"]))
Run Code Online (Sandbox Code Playgroud)

结果是:

usage: choices.py [-h] [-p {win64,win32}]
choices.py: error: argument -p: invalid choice: 'Win32' (choose from 'win64','win32')
Run Code Online (Sandbox Code Playgroud)

python case-insensitive argparse

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

通过用include替换前向声明来更改代码的含义

Google C++样式指南指出了这一点

在极端情况下,用前向声明替换#include可以默默地改变代码的含义.

你能帮我找一些例子吗?

c++ include forward-declaration

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

通过CMake剥离文件名(最短)扩展名(获取文件名删除最后一个扩展名)

get_filename_component可用于删除/提取最长的扩展名.

EXT =文件名最长扩展名(.bc来自d/abc)

NAME_WE =没有目录或最长扩展名的文件名

我的名字中有一个带圆点的文件,所以我需要最短的扩展名:

set(MYFILE "a.b.c.d")
get_filename_component(MYFILE_WITHOUT_EXT ${MYFILE} NAME_WE)
message(STATUS "${MYFILE_WITHOUT_EXT}") 
Run Code Online (Sandbox Code Playgroud)

报告

-- a
Run Code Online (Sandbox Code Playgroud)

但我想要

-- a.b.c
Run Code Online (Sandbox Code Playgroud)

在没有最短扩展名的情况下查找文件名的首选方法是什么?

cmake

11
推荐指数
3
解决办法
7509
查看次数

COMPILE_FLAGS和COMPILE_OPTIONS之间的区别

有什么区别

COMPILE_FLAGS:编译此目标源时使用的其他标志.

COMPILE_OPTIONS:传递给编译器的选项列表.

就产生的VS2010解决方案而言,这些命令产生相同的结果:

target_compile_options(target PRIVATE "/option=test1")
set_target_properties(target PROPERTIES COMPILE_FLAGS "/option=test1")
set_target_properties(target PROPERTIES COMPILE_OPTIONS "/option=test1")
Run Code Online (Sandbox Code Playgroud)

cmake

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

密钥或标签中的i18next json点

JS: i18n.t("SOME TEXT TO BE TRANSLATED.")

JSON: "SOME TEXT TO BE TRANSLATED.": "Een stukje tekst om te vertalen"

i18n.t("SOME TEXT TO BE TRANSLATED.") 给我 "SOME TEXT TO BE TRANSLATED.".

如果我删除"." (点)来自标签和函数t,而不是文本被翻译.

怎么解决这个?

i18next

8
推荐指数
3
解决办法
2642
查看次数

Fortran中的断言

Fortran是否具有C的标准函数/关键字等价物assert

assert在Fortran2003标准中找不到提到的.我发现如何使用预处理器的方法很少,但在这个答案中建议编写自己的断言.是否可以在不使用预处理器的情况下创建此类用户功能/子程序?

我希望这些断言对于发布版本是禁用的.

preprocessor fortran assert

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

禁止未使用的变量警告

Fortran中抑制警告消息的最佳实践是什么,例如:

remark #7712: This variable has not been used.
Run Code Online (Sandbox Code Playgroud)

仅用于一个特定变量(API中我们不想破坏的想象函数)?

注意:我不想禁止显示文件的所有警告

注2:gcc的相似之处:__attribute__((__unused__))MACRO的其他常见C惯例

注意3:我对ifort尤其感兴趣,但是多编译器会更好。

warnings fortran unused-variables intel-fortran

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

C科学符号指数格式

是否可以控制printf的科学记法(e)打印的指数中显示的位数?

这段代码

#include <stdio.h>

int main(void) {
    printf("%6.3e", 403.0);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

产生(取决于编译器/平台):

4.030e+002(VS2010)或4.030e+02(gcc 4.3.4)或甚至4.030e+2

在比较不同平台上生成的文件时,指数中不同的位数很容易混淆diff工具.

c printf

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

具有作用域枚举的 QFlags 的相等运算符

我使用范围枚举定义了一些标志,如下所示:

enum class Capability : int
{
  NoCapabilities  = 0,
  SomethingCool = 1,
  UberCool = 1 << 1,
  EvenCooler = 1 << 2,
};
Q_DECLARE_FLAGS( Capabilities, Capability )
Run Code Online (Sandbox Code Playgroud)

现在,我尝试使用相等运算符:

Capabilities(DataCapability::NoCapabilities) == Capability::NoCapabilities
Run Code Online (Sandbox Code Playgroud)

testFlag我无法在当前示例中使用,因为NoCapabilities = 0. 如果枚举没有作用域(删除class关键字),则此方法有效。

显然,转换为 int ( static_cast<int>(NoCapabilities)) 是可行的,但它真的很难看。

解决这个问题的方法是什么?使用 0 零值并进行测试是一种不好的做法吗?

enums flags qt c++11

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