我正在将一个用C++编写的应用程序从Windows移植到Linux。我遇到了头文件路径的问题。Windows使用,而Linux使用
/
。我发现在每个源文件和头文件中都更改这个很麻烦。有没有什么解决办法?
在#include路径中始终使用正斜杠。编译器的工作是将路径映射到底层操作系统支持的任何斜杠/目录方案。
你们啊!是的,你们总是可以使用正斜杠,而且应该这样做。我认为问题在于如何从这里到那里!
如果您已经安装了Perl,以下一行代码将把C ++源代码文件转换为使用正斜杠,并将原始版本保存在扩展名为 .bak
的文件中:
perl -i.bak -pe "tr!\!/! if /^s*#s*include/" myfile.cpp
上述命令行适用于Windows;如果您使用Linux或其他类Unix的shell,请在第三个参数周围使用单引号代替双引号。
如果你有一堆需要转换的文件,比如所有以.cpp
结尾的文件:
for %f in (*.cpp) do perl -i.bak -pe "tr!\!/! if /^s*#s*include/" %f
对应的命令为 Bourne Shell 环境(典型的 Linux Shell):
for f in *.cpp; do perl -i.bak -pe tr!\!/! if /^s*#s*include/ $f; done
如果您没有安装Perl,您应该能够找到一个允许在文件之间搜索和替换的文本编辑器。
Windows API始终支持正斜杠作为目录分隔符。这是因为至少在DOS 3.1时期就已经支持了。问题始终存在于COMMAND.COM和CMD.EXE。它们使用正斜杠作为选项指示符(而不是在Unix中找到的破折号)。在字符串中使用反斜杠转义特殊字符的语言中,永远不要使用反斜杠作为目录分隔符。
如果你缺少Unix shell,难道你没有一个可以在多个文件中进行搜索/替换的编辑器吗?天哪,如果必须的话,编写一个小程序来执行它。解析C ++源代码的#include语句不难。
在#include指示中始终使用正斜杠。 一些操作系统/编译器需要它,并且Windows / Visual Studio足够聪明,可以正确处理它。
由於您從 Windows 代碼開始,我假設您有 Visual Studio。使用尋找和替換對話框,創建一個常規表達式,將為您進行替換。在所有文件上運行尋找和替換。
例如,使用类似这样的东西:
#include:b+<{[^\>]}\
针对您的搜索表达式和
#include <1
对于替换表达式(警告:未经测试),在所有文件上运行,直到没有替换发生。然后将尖括号改为引号并重复。
你使用的是哪个Windows版本?据我所知,从Windows XP开始,斜线确实可以作为路径分隔符使用。
您可以尝试基于之前的 Perl 命令执行此命令,该命令可以递归地执行工作。
find . -type f -name * | xargs grep #include | grep \ |awk -F: {print $1} |sort| uniq | xargs -n1 perl -i.bak -pe tr!\!/! if /^s*#s*include/
- winforms
- combobox
- fogbugz
- java
- date
- internationalization
- asp.net
- iis
- url-rewriting
- urlrewriter
- c#
- enums
- ocaml
- haxe
- algorithm
- string
- viewstate
- .net
- c++
- c
- symbol-table
- mysql
- database
- postgresql
- licensing
- migration
- vb.net
- vb6
- declaration
- vb6-migration
- python
- psycopg2
- backup
- vmware
- virtualization
- gnu-screen
- authentication
- desktop
- excel
- xll
- cultureinfo
- regioninfo
- oracle
- client
- session
- download
- html
- virtual
- constructor
- scenarios
- perl
- full-text-search
- javascript
- ajax
- testing
- oop
- inheritance
- vim
- encapsulation
- information-hiding