C++是否有一个宏定义引入判断如果存在某个头文件则使用这个文件,否则使用其余的头文件

牧童吃五谷 2018-01-09 05:44:56
我的意思是根据判断硬盘中是否存在某一个头文件,做不同的引入头文件,
有点像
#__if_exists "c:\\aaa.h"
#include "c:\aaa.h"
#else
#include "c:\bbb.h"
#endif

...全文
1944 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cmf41013 2019-09-25
  • 打赏
  • 举报
回复
引用 楼主 牧童吃五谷 的回复:
我的意思是根据判断硬盘中是否存在某一个头文件,做不同的引入头文件, 有点像 #__if_exists "c:\\aaa.h" #include "c:\aaa.h" #else #include "c:\bbb.h" #endif
在aaa.h里定义一个宏 #define AAA_H_EXIST 在bbb.h里定义一个宏 #define BBB_H_EXIST 如果没有这两个文件就新建一个空的aaa.h、bbb.h 2、在使用这两个头文件中根据 AAA_H_EXIST、BBB_H_EXIST这些宏去分别执行不同的代码 预处理命令是不能判断文件是否存在的,只有在编译时候才能知道,预处理是在编译之前执行的。 无法直接使用宏命令判断文件是否存在
牧童吃五谷 2018-05-26
  • 打赏
  • 举报
回复
其实功能我真的不知道的,我是做了一个程序开发模板,然后别人在模板的基础上做一些更改,由于模板不断升级更新,但别人可能使用的是旧的模板进行开发的,我更新模板的话,希望别人不需要修改程序就可以直接编译了,所以我就模板程序就可能需要判断很多它原来是否有的文件
zilaishuichina 2018-01-11
  • 打赏
  • 举报
回复
lz的这个需求本身 就是一个伪需求 引入不同的头文件,只有2种情况, 1,这两个头文件是一样的,只是放的路径不一样。也就是说楼主不知道想要的头文件可能在哪个路径下,所以想用这样的宏去猜,如果a路径下有,就用a路径下的,如果a路径下没有,就用b路径下的,类似这种。 对于这种情况,lz还是先手动确认路径比较好,其次使用相对路径会比使用绝对路径好。 2,这两个头文件是不一样的,也就是说,你接下来需要用到的变量/函数,在这两个不同的头文件中,有不同的实现,是不一样的功能。 对于这种情况,既然是不一样的功能,那么lz你编译的时候,或者说你决定写这个代码的时候,你总归是要确认,你想实现的这个程序的功能的到底是哪一种吧。 总不能说,你写一个程序,这个程序的功能是不确定的,到底实现什么功能取决于你有哪一份头文件,有a.h,这个程序就实现a的功能,如果没有就实现b的功能? 既然程序的功能是确定的,那么需要include哪个头文件,就也是确定的
赵4老师 2018-01-10
  • 打赏
  • 举报
回复
推荐使用软件Everything
paschen 版主 2018-01-09
  • 打赏
  • 举报
回复
这种外部的功能IDE没法帮你完全考虑,你可以自己开发个插件什么的来实现
开源学开源 2018-01-09
  • 打赏
  • 举报
回复
应该没有吧!
牧童吃五谷 2018-01-09
  • 打赏
  • 举报
回复
有点类似,但还不够,我要判断的标准是是否存在文件
  • 打赏
  • 举报
回复
有类似的,比如说,软件开启调试或关闭调试功能
#ifdef DEBUG_ON_RUN
#define ON_DEBUG 1
#include "debug.h"
牧童吃五谷 2018-01-09
  • 打赏
  • 举报
回复
或者采用某种方法能够解决就行了
paschen 版主 2018-01-09
  • 打赏
  • 举报
回复
没见过类似这种的用法呢
make是在1977年在贝尔实验室(Bell Labs)研发的 Unix系统中的一款依赖关系检查工具程序(Utility software)。make的应用非常广泛,它被用来构建 C、C++ 、Pascal  Fortran 等项目,自动化构建生成可执行文件或者库文件。make通过读取Makefile文件以自动化建构软件, 它会根据依赖文件的修改时间进行判断。确定一个target的依赖关系,然后把生成这个target的相关命令传给shell去执行。GNU make 和大多数版本的 make 之间最重要的区别是 GNU make 是自由软件,常和GNU编译系统一起被使用,是大多数GNU Linux安装的一部分。GNU make 在 makefile 中具有许多强大的功能,超出了其他 make 版本的功能,它还可以重新生成、使用、然后删除不需要保存的中间文件。GNU make 还有一些非常方便的简单功能。例如,选项“假装源文件文件没有更改,即使它已更改。当您向文件添加新宏时,这非常有用。大多数版本的 make 都会假设它们必须重新编译所有使用文件的源文件,但是如果您知道对文件的更改不需要重新编译 GNU make 为您提供了一种避免重新编译的方法-o file 。 黄强老师针对零编程基础的同学,精心打磨make核心知识点,帮助你快速掌握Linux编程中的make的构建!适用人群: 零基础、新手、想快速学习Linux下C、C++编程的童鞋!
设备树(device tree)机制是Linux内核从linux-3.x版本开始引进的一种机制,目的是解决内核源码的arch/arm目录下代码混乱的问题:随着ARM生态的快速发展,在内核源码的arch/arm目录下,存放着几十种arm芯片和几百个开发板相关的源文件,很多开发板和处理器的中断、寄存器等相关硬件资源都在这个目录下以.c或.h的文件格式定义。而对于内核来说,与这些硬件耦合,会导致内核代码混乱不堪,每个开发板上运行的内核镜像都必须单独编译配置,无法通用。什么时候Linux内核能像Windows镜像那样,无论你的电脑什么配置,一个Windows安装包,都可以直接下载安装运行呢?设备树机制,实现了Linux内核和硬件平台的解耦:每个硬件平台的硬件资源使用一个设备树文件(xxx.dts)来描述,而不是在arch/arm下以.c 或 .h 文件来定义。Linux内核是一个通用的内核,在启动过程中,在通过解析设备树中的硬件资源来初始化某个具体的平台。 引入设备树后,很多和内核驱动开发的工作也发生了变化:以往驱动工程师关注的文件宏定义、寄存器定义,现在这些基本上不用关注,关注的重点则转向了如何根据硬件平台去配置和修改设备树文件。很多驱动的编程接口也发生了变化,开始慢慢使用device tree提供的编程接口去开发驱动。本期课程主要面向嵌入式开发人员,分享Linux下驱动开发所需要的设备树知识和必备技能

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧