我正在将用C++编写的应用程序从Windows移植到Linux.我的头文件路径有问题.Windows使用\
和Linux使用/
.我发现在每个源和头文件中更改它很麻烦.有一些工作吗?
始终在#include路径中使用正斜杠.将路径映射到底层操作系统支持的任何斜杠/目录方案是编译器的工作.
你这个人! 是的,您可以而且应该始终使用正斜杠.我认为问题是如何从这里到达那里!
如果安装了Perl,则以下一个内核将转换C++源文件以使用正斜杠,将原始版本保存在扩展名为的文件中.bak
:
perl -i.bak -pe "tr!\\!/! if /^\s*#\s*include\b/" myfile.cpp
(上面的命令行适用于Windows;如果您使用的是Linux或其他类似Unix的shell,请在第3个参数周围使用单引号而不是双引号.)
如果您有一堆文件需要转换,请说出以下结尾的所有文件.cpp
:
for %f in (*.cpp) do perl -i.bak -pe "tr!\\!/! if /^\s*#\s*include\b/" %f
Bourne shell环境(典型的Linux shell)的相应命令:
for f in *.cpp; do perl -i.bak -pe 'tr!\\!/! if /^\s*#\s*include\b/' $f; done
如果您没有安装Perl,您应该能够找到允许搜索和替换文件的文本编辑器.
Windows API 始终支持正斜杠作为目录分隔符.这是因为早在至少DOS 3.1它也得到了支持.问题一直是COMMAND.COM和CMD.EXE.它们使用正斜杠作为选项指示符(而不是Unix中的破折号).永远不要在使用字符串中的反斜杠转义特殊字符的语言中对目录分隔符使用反斜杠.
如果您没有Unix shell,那么您是否拥有可以跨多个文件进行搜索/替换的编辑器?哎呀,如果你不得不写一个小程序来做.解析#include语句的C++源代码并不难.
始终在#include指令中使用正斜杠.某些操作系统/编译器需要它,而Windows/Visual Studio足够智能,可以正确处理它.
从Windows代码开始,我假设你有Visual Studio.使用查找和替换对话框并创建一个可替代您的正则表达式.对所有文件运行查找和替换.
例如,使用以下内容:
#include:b+<{[^\\\>]}\\
为您的搜索表达和
#include <\1
替换表达式(警告:未经测试).在所有文件上运行此命令,直到不进行替换.然后将有角度的括号切换为引号并重复.