C编译相关

一、编译期宏

1,#error在编译期进行警告判断

复制代码
eg:
#if USB_MAXCHILDREN > 31 /* 8*sizeof(unsigned long) - 1  和条件编译宏一起使用,在编译时就可以根据宏的值进行选择性的打印、编译*/
#error event_bits[] is too short!
#endif

  #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0)
  #error LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0)
  #else
  #error LINUX_VERSION_CODE is ok!!! /*打印了它*/
  #endif

 
复制代码

#error message ----注:message不需要用双引号包围,

#error 编译指示字用于自定义程序特有的编译错误消息类似的,

#warning 用于生成编译警告,但不会停止编译。

2. #line 的用法:

#line 用于强制定新的行号和编译文件名,并对源程序的代码重新编号,

用法:#line number filename   注:filename可省略,

#line 编译指示字的本质是重定义_line_和_FILE_

 

2. pkg-config

pkg-config可以向configure和make传递include path和library path。

$ pkg-config --list-all: list all known packages 列出所有的包 $ pkg-config --cflags libdrm: -I/usr/include/libdrm  列出库编译时需要的头文件 $ pkg-config --libs libdrm: -ldrm  链接的动态库

gcc sample.c -o sample 'pkg-config --cflags --libs libdrm'

如果libdrm不在标准路径下,那么这样gcc sample.c -o sample `PKG_CONFIG_PATH=path pkg-config --cflags --libs libdrm`

默认情况下编译器会去/usr/include等特定目录下寻找头文件和库文件,但是有时候这些库可能再各个位置. pkg-config默认会在/usr/lib/pkgconfig/目录下查找所有的.pc文件,当找不到到时候会去到环境变量PKG_CONFIG_PATH查找所有的.pc文件,根据.pc文件返回头文件、库文件位置等各种参数给编译器使用。 库编译完成后,会在{installed_home/lib/}下产生一个名为pkgconfig的目录,内含该链接库的.pc文件,将包含.pc的路径添加到环境变量PKG_CONFIG_PATH中,就可以让pkg-config在这些路径的.pc文件中 查找到你自己编译库的头文件和库文件到位置。

编译时: export PKG_CONFIG_PATH=/installed_home/lib/pkgconfig:$PKG_CONFIG_PATH

程序运行时: export LD_LIBRARY_PATH=/path/lib:$LD_LIBRARY_PATH以便应用程序可以查找到库文件的位置。

 

二、使用举例

1. 使用#error来显示头文件的依赖关系

复制代码
#ifndef __LINUX_SPINLOCK_H //依赖的头文件的宏,指明此头文件不能被直接include
#error "please don't include this file directly"
#endif

依赖的头文一般:
#ifndef __LINUX_SPINLOCK_H
#define __LINUX_SPINLOCK_H
...
#endif /* __LINUX_SPINLOCK_H */
复制代码

 

posted on   Hello-World3  阅读(174)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示