在make类构建系统配置文件中定义函数宏

CMakeLists中定义函数宏

add_definitions(-D'sysctlbyname(name,oldp,oldlenp,ewp,newlen) = -1')

这个写法会报warning:

CMake Warning (dev) at /ssd1t/helloworld/CMakeLists.txt:114:
  Syntax Warning in cmake code at column 64

  Argument not separated from preceding token by whitespace.
This warning is for project developers.  Use -Wno-dev to suppress it.

原因是‘=’号前面需要有空格。

写成下面两种都可以:

add_definitions(-D'sysctlbyname(name,oldp,oldlenp,ewp,newlen) =-1')
add_definitions(-D'sysctlbyname(name,oldp,oldlenp,ewp,newlen) = -1')

虽然可以通过,但是在实际编译的时候会报错,原因是cmake并不支持function-style的macro定义:

Preprocessor definitions for compiling a target’s sources.

The COMPILE_DEFINITIONS property may be set to a semicolon-separated list of preprocessor definitions using the syntax VAR or VAR=value. Function-style definitions are not supported. CMake will automatically escape the value correctly for the native build system (note that CMake language syntax may require escapes to specify some values).

Makefile中定义函数宏

直接通过g++命令测试,编译一个helloworld.cpp的文件,报错:

$ g++ -Dsysctlbyname\(name, oldp, oldlenp, newp, newlen\)=1 helloworld.cpp 

<command-line>: error: expected parameter name, found "1"
helloworld.cpp: In function ‘int main(int, char**)’:
helloworld.cpp:28:7: error: ‘sysctlbyname’ was not declared in this scope
   28 |   if (sysctlbyname (0, 1, 2, 3, 4) == -1)
      |       ^~~~~~~~~~~~

修改为下面这样正常,这个宏用单引号包起来:

g++ -D'sysctlbyname(name, oldp, oldlenp, newp, newlen)=1' helloworld.cpp

这里使用了单引号 ' 来包围整个宏定义,可以确保如果宏定义中包含空格或特殊字符,它们会被正确地视为宏定义的一部分。

放到Makefile里面,即:

ifndef HAVE_SYSCTLBYNAME
CXXFLAGS += -D'sysctlbyname(name, oldp, oldlenp, newp, newlen)=-1'
endif

相关推荐

最近更新

  1. C语言:再探C语言指针

    2024-07-09 21:40:09       0 阅读
  2. 安卓开发使用seekBar改变ImageView中图片的色彩

    2024-07-09 21:40:09       0 阅读
  3. matlab中feval()的用法

    2024-07-09 21:40:09       0 阅读
  4. 【Linux常用命令】之mkdir命令

    2024-07-09 21:40:09       0 阅读
  5. 在 macOS 上使用 Jadx 进行 APK 反编译

    2024-07-09 21:40:09       0 阅读
  6. C++生成随机数的两种方法

    2024-07-09 21:40:09       0 阅读

热门阅读

  1. lvs集群

    lvs集群

    2024-07-09 21:40:09      8 阅读
  2. 记录Linux安装go环境的一个坑

    2024-07-09 21:40:09       8 阅读
  3. Python开发——Python 字典的使用

    2024-07-09 21:40:09       7 阅读
  4. 流媒体技术

    2024-07-09 21:40:09       10 阅读
  5. mysql面试题 Day5

    2024-07-09 21:40:09       6 阅读
  6. Xcode简介

    2024-07-09 21:40:09       6 阅读