Pergunta

Eu sou portando um aplicativo escrito em C ++ do Windows para o Linux. Eu tenho um problema com o caminho de arquivos de cabeçalho. usa o Windows \ e Linux utiliza /. Eu estou achando complicado para mudar isso em cada arquivo de origem e de cabeçalho. Existe algum trabalho ao redor?

Foi útil?

Solução

Sempre use barras em caminhos # include. É o trabalho do compilador para mapear o caminho para o que cortar / esquema de diretório os suportes sistema operacional subjacente.

Outras dicas

Você pessoas! Sim , você pode, e deve, sempre use barras. Acho que a questão é como obter não de aqui !

Se você tem Perl instalado, a um forro seguinte irá converter um arquivo de origem C ++ para usar barras, salvando a versão original em um arquivo com extensão .bak:

perl -i.bak -pe "tr!\\!/! if /^\s*#\s*include\b/" myfile.cpp

(A linha de comando acima é para Windows;. Se você estiver usando Linux ou outro Unix-like shell, use aspas simples em torno do 3º parâmetro em vez de aspas duplas)

Se você tem um monte de arquivos que você precisa para converter, dizem todos os arquivos que terminam em .cpp:

for %f in (*.cpp) do perl -i.bak -pe "tr!\\!/! if /^\s*#\s*include\b/" %f

O comando correspondente para um ambiente de Bourne shell (shell Linux típico):

for f in *.cpp; do perl -i.bak -pe 'tr!\\!/! if /^\s*#\s*include\b/' $f; done

Se você não tem Perl instalado, você deve ser capaz de encontrar um editor de texto que permite pesquisar e substituir em arquivos.

O APIs Windows tem sempre apoiado barra como separador de diretório. E isso é porque já em pelo menos DOS 3.1 foi apoiado também. O problema sempre foi COMMAND.COM e CMD.EXE. Eles usam barra como o indicador de opção (em vez de traço como encontrado em Unix). Nunca, jamais use barras invertidas para separadores de diretório em línguas onde uma barra invertida em uma string é usado para escapar caracteres especiais.

Se você não tiver um shell Unix, você não tem um editor que não procurar / substituir em vários arquivos? Heck, escrever um pequeno programa para fazê-lo se você tiver que. código-fonte análise C ++ para suas instruções # include não pode ser difícil.

Sempre usar barras nas directivas # include. Alguns sistemas operacionais / compiladores exigir, e Windows / Visual Studio é inteligente o suficiente para lidar com isso corretamente.

Desde a sua partida com o código de Windows, eu estou supondo que você tem Visual Studio. Use a descoberta e de diálogo substituir e criar uma expressão regular que irá fazer a substituição para você. Execute o localizar e substituir em todos os arquivos.

Por exemplo, usar algo como isto:

#include:b+<{[^\\\>]}\\

para sua expressão de pesquisa e

#include <\1

para a expressão replace ( alerta: não testado ). Executar este em todos os arquivos até que não haja substituições são feitas. Em seguida, alternar os suportes angulares para citações e repita.

Qual versão do Windows você está usando? Tanto quanto eu sei, a partir do Windows XP, a frente-barras fazer realmente o trabalho como delimitadores de caminho.

Você pode tentar este comando baseado em comando perl anterior, que fazem o trabalho recusrively

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\b/'
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top