VS系例引入lib采用__FILE__宏

本文解释了如何在C/C++预处理指令中使用宏定义来拼接文件路径,并通过实例展示了如何结合条件编译和相对路径来指定不同配置下的库文件路径。

在读代码的时候,发现有这样的写法,开始很不理解。

#ifndef _LIBPATH_
#define _LIBPATH_(p,f)   p##f
#endif

#	ifdef _UNICODE
#		ifdef _DEBUG
#			pragma comment(lib,  _LIBPATH_(__FILE__,   "/../Lib/DuiLib_ud.lib"))
#		else
#			pragma comment(lib,  _LIBPATH_(__FILE__,   "/../Lib/DuiLib_u.lib"))
#		endif
#	else
#		ifdef _DEBUG
#			pragma comment(lib,  _LIBPATH_(__FILE__,   "/../Lib/DuiLib_d.lib"))
#		else
#			pragma comment(lib,  _LIBPATH_(__FILE__,   "/../Lib/DuiLib.lib"))
#		endif
#	endif

因为__FILE___代表当前文件名,怎么可以直接在后面连接相对路径的运算符呢?
后来,我又进行了几次实现,发现在#pragma comment宏中,如果使用文件名为最后结尾,可以看作是一个目录,那么当采用两点结尾,则表返回其上级目录,也就是在原文件的当前目录。
下面可以举一个例子:
如果__FILE__表示如下:C:\Users\COLORFUL\Desktop\ConsoleApplication1\ConsoleApplication1.cpp,则调用_LIBPATH_(__FILE__, "/../StaticLib1.lib")宏后生成如下代码:

C:\Users\COLORFUL\Desktop\ConsoleApplication1\ConsoleApplication1.cpp/../StaticLib1.lib

其实真正的代表的地方为:

C:\Users\COLORFUL\Desktop\ConsoleApplication1\StaticLib1.lib

这里要注意的一点是在使用相对目录时,要使用/,不要使用\,如果使用\,会报转义字符出错,因为在C/C++里面的转义字符都是以 \开头的。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值