我在将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() …
情况就是这样,
我试图调查实现函数的一些优点/缺点,如下所示:
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传递给函数的常用参数可以带来一些优化的好处.我的问题是,是否有人有现实生活中的例子来证明这一主张?
我在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 ×2
c++ ×1
c99 ×1
cmake ×1
const ×1
enums ×1
linux ×1
linux-kernel ×1
optimization ×1
versioning ×1