首先是整个故事:
我正在重构一些包含以下几行的遗留代码:
#pragma comment(lib, "D:\Some\absolute\path\to\some\library.lib")
由于我不能在这里解释的原因,我需要在这里有相对的路径。如果有这样的,那就太好了
#pragma comment(lib, "to\some\library.lib")
把"D:\Some\absolute\path\"放在库目录的属性中会起作用,但没有,我确实理解为什么。
我目前的方法是(i)将D:\Some\absolute\path定义为用户宏Some_absolute_path,然后(ii)将Some_AABSolute_path#$(Some_absolute_path)添加到预处理器定义中,从而生成编译器调用
cl ... /D "SOME_ABSOLUTE_PATH#D:Someabsolutepath"
然后我在类似的代码中使用这个定义
#pragma comment(lib, SOME_ABSOLUTE_PATH ## "to\some\library.lib")
这不起作用。看看预处理器的输出,它被扩展到这个
#pragma comment(lib, D:Someabsolutepath ## "to\some\library.lib")
这当然是因为我在某些地方没有正确地通过引号。在用户宏(i)中添加引号没有帮助,因为这会导致
cl ... /D "SOME_ABSOLUTE_PATH#"D:Someabsolutepath""
命令行解释器无法正确解析。
你是怎么做到的?我也对任何其他满足约束的解决方案持开放态度,即我可以在pragma指令中有一些相对路径。
#define STRINGISE2(X) #X
#define STRINGISE(X) STRINGISE2(X)
#pragma comment(lib, STRINGISE(SOME_ABSOLUTE_PATH) "to\some\library.lib")