在读代码的时候,发现有这样的写法,开始很不理解。
#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++里面的转义字符都是以 \开头的。
本文解释了如何在C/C++预处理指令中使用宏定义来拼接文件路径,并通过实例展示了如何结合条件编译和相对路径来指定不同配置下的库文件路径。
894

被折叠的 条评论
为什么被折叠?



