小编Laz*_*eus的帖子

无法导出cmake PROJECT_VERSION_MAJOR,因为它等于零

我在将cmake PROJECT_VERSION_MAJOR变量导出到config.h文件时遇到问题.在我的主要内容CMakeLists.txt我通过调用project()CMakeLists.txt文件根据cmake文档设置此变量:

cmake_minimum_required(VERSION 3.2.2)
cmake_policy(SET CMP0048 NEW)

set(PROJECT "SampleName")

project(${PROJECT}
    VERSION "0.0.0")

configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
Run Code Online (Sandbox Code Playgroud)

通过configure_file()invokation我试图将一些cmake变量导出config.h到头文件.请看看我的config.h.cmake.file:

#ifndef CONFIG_H
#define CONFIG_H

#cmakedefine PROJECT "@PROJECT@"

#cmakedefine PROJECT_VERSION "@PROJECT_VERSION@"

#cmakedefine PROJECT_VERSION_MAJOR "@PROJECT_VERSION_MAJOR@"

#cmakedefine PROJECT_VERSION_MINOR "@PROJECT_VERSION_MINOR@"

#cmakedefine PROJECT_VERSION_PATCH "@PROJECT_VERSION_PATCH@"

#endif
Run Code Online (Sandbox Code Playgroud)

cmake ..在我的构建目录中运行命令后config.h创建,但它看起来像这样:

#ifndef CONFIG_H
#define CONFIG_H

#define PROJECT "SampleName"

#define PROJECT_VERSION "0.0.0"

/* #undef PROJECT_VERSION_MAJOR */

/* #undef PROJECT_VERSION_MINOR */

/* #undef PROJECT_VERSION_PATCH */

#endif
Run Code Online (Sandbox Code Playgroud)

我想这个行为的原因是在cmake文档中关于该configure_file() …

c++ versioning cmake

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

在通过值传递const参数的情况下,是否有任何实际的优化优势示例?

情况就是这样,

我试图调查实现函数的一些优点/缺点,如下所示:

void foo(const int a, const int b)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

使用通用函数原型作为API,它包含在头文件中,如下所示:

void foo(int a, int b)
Run Code Online (Sandbox Code Playgroud)

我在下面的问题中找到了关于这个主题的大量讨论:

类似问题

我同意rlerallut的回答,他说的是自我记录代码,并且在代码的安全性方面有点偏执.

然而,这是一个问题,有人在那里写道,使用const传递给函数的常用参数可以带来一些优化的好处.我的问题是,是否有人有现实生活中的例子来证明这一主张?

c optimization const c99

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

为什么有时Linux内核中枚举的第一个成员用0初始化

我在linux内核源代码中注意到,一些枚举定义的第一个枚举成员用0显式初始化,如下所示:

enum i2c_adapter_type {
    I2C_ADAPTER_SMBUS = 0,
    I2C_ADAPTER_VGADDC,
    I2C_ADAPTER_PANEL,
    I2C_ADAPTER_DESIGNWARE_0,
    I2C_ADAPTER_DESIGNWARE_1,
};
Run Code Online (Sandbox Code Playgroud)

chromeos_laptop.c提供的代码片段:56

https://github.com/torvalds/linux/blob/master/drivers/platform/chrome/chromeos_laptop.c

有人可以解释一下,做这样一个结构的目的是什么?我知道第一个枚举成员在后来的C标准(ANSI,C99等)中保证为0,那么为什么人们这样做呢?

c linux enums linux-kernel

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

标签 统计

c ×2

c++ ×1

c99 ×1

cmake ×1

const ×1

enums ×1

linux ×1

linux-kernel ×1

optimization ×1

versioning ×1