如何通过Visual Studio中的预处理器传递包含字符串和引号的环境变量
How to pass an environment variable containing a string and quotation marks through the preprocessor in Visual Studio?
首先是整个故事:
我正在重构一些包含以下几行的遗留代码:
#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")
相关文章:
- 编译包含字符串的代码时遇到问题
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 一个函数,用于查找字符串1包含字符串2 c++的次数
- C++ 创建包含链表和字符串的对象的链接列表时出错
- C++-字符串是否包含一个带有简单循环的单词
- 编辑字符串以包含括号 c++ 之间的变量
- 使用提升元解析字符串解析包含的文件
- 当字符串包含 %2C 时,在 c++ 中不完整的 std::string
- C++ 检查 UTF8 字符串包含指定的字符
- 将文件作为字符串包含在内
- 为什么string.empty()在字符串包含一个值时评估为true
- boost::p rogram_option::store 在选项字符串包含混合语言字符时引发异常
- 在 c++ 中将字符串(包含字符和浮点数)转换为双精度
- 将字符串(包含数字)转换为整数并返回该整数
- 如果输入字符串包含"%",则vsntprintf_s崩溃
- 当一个字符串包含另一个字符串的一部分时比较字符串
- 如果字符串包含多个 ,如何在每25个换行符( )上分割字符串
- 输出字符串包含奇怪的字符
- 当字符串包含多个NUL字符时,如何获取c_str(用于发送)
- 乘法的字符串[包含整数],输出也存储在字符串中,如何