Вызов cl.exe (компилятор MSVC) в оболочке Cygwin

Код не запускается / что-то похожее на части моего PHP-кода выводятся

Если вы не видите никакого результата из вашего кода PHP и / или видите части своего литерального исходного кода PHP на веб-странице вы можете быть уверены, что ваш PHP на самом деле не выполняется. Если вы используете View Source в своем браузере, вы, вероятно, видите весь исходный код PHP-файла. Поскольку PHP-код встроен в теги , браузер попытается интерпретировать их как HTML-теги, и результат может выглядеть несколько смущенным.

Чтобы на самом деле запустить ваши PHP-скрипты, вам нужно:

  • веб-сервер, который выполняет ваш скрипт
  • , чтобы установить расширение файла на .php, в противном случае веб-сервер не будет интерпретировать его как таковой *
  • для доступа ваш .php-файл через веб-сервер

* Если вы не переконфигурируете его, все может быть настроено.

Это последнее особенно важно. Двойной щелчок по файлу, скорее всего, откроет его в вашем браузере, используя такой адрес, как:

file://C:/path/to/my/file.php

Это полностью обходит любой веб-сервер, который у вас может быть запущен, и файл не интерпретируется. Вам нужно посетить URL-адрес файла на вашем веб-сервере, вероятно, что-то вроде:

http://localhost/my/file.php

Вы также можете проверить, используете ли вы короткие открытые теги вместо и ваша PHP-конфигурация отключила короткие открытые теги.

Также см. PHP-код не выполняется, вместо этого код отображается на странице

25
задан Peter Mortensen 23 April 2012 в 11:30
поделиться

8 ответов

Я обычно решаю это путем добавления

call "%VS80COMNTOOLS%vsvars32.bat" >NUL:

к c:/cygwin/cygwin.bat. Обратите внимание, что переменная VS80COMNTOOLS чрезвычайно полезна, так как она дает Вам надежное (гм) способ определить местоположение vsvars32.bat.

Другой подход - это, которое позволяет Вам легко переключаться между различными версиями Studio:

function run_with_bat()
{
    batfile=$1; shift
    tmpfile="$TMP/tmp$.bat"
    echo "@echo off" > $tmpfile
    echo "call \"%$batfile%vsvars32.bat\" >NUL:" >> $tmpfile
    echo "bash -c \"%*\"" >> $tmpfile
    cmd /c `cygpath -m "$tmpfile"` "$@"
    status=$?
    rm -f $tmpfile
    return $status
}

function run_vs9()
{
    run_with_bat VS90COMNTOOLS "$@"
}

function run_vs8()
{
    run_with_bat VS80COMNTOOLS "$@"
}

можно теперь сделать:

$ run_vs8 cl
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved. 

usage: cl [ option... ] filename... [ /link linkoption... ]
$ run_vs9 cl
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

usage: cl [ option... ] filename... [ /link linkoption... ]

Примечание версия компилятора.

25
ответ дан JesperE 28 November 2019 в 18:25
поделиться

Я понимаю, что Ваша проблема преобразовывает vcvars32.bat в сценарий оболочки.

Один путь вокруг проблемы основан на идее, что переменные среды наследованы, когда один процесс запускает другого. Таким образом, можно просто выполнить vcvars32 под cmd и затем выполнить удар. Это хорошо работает на моей машине:

sh-3.2$ cl
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

usage: cl [ option... ] filename... [ /link linkoption... ]

, С другой стороны, выполненный набор прежде и после вызова vcvars32 под cmd, и затем создают сценарий оболочки для установки переменных среды.

13
ответ дан Diomidis Spinellis 28 November 2019 в 18:25
поделиться

Другая альтернатива должна открыть vcvars32.bat (или vsvars32.bat, который делает реальную работу в последней версии Visual Studio), посмотрите на то, что это делает и копирует это в соответствующем сценарии оболочки.

Это не особенно сложно - все, что это делает установлен набор переменных среды.

2
ответ дан Michael Burr 28 November 2019 в 18:25
поделиться

Я преобразовал мой vsvars32.bat файл с моим visual_studio.env файл. Когда я должен использовать среду Visual Studio командной строки, я просто делаю источник этого файла.

В sh среда оболочки, я не могу зарегистрировать путь Windows (\ и ; столкновение с sh) поэтому, прежде чем я переведу их с cygpath -au, или cygpath -aup commands затем я записываю их в мой .env файл и перевожу их назад с [1 110] или cygpath -aup commands.

Мой visual_studio.env файл похожи на это:

VS80COMNTOOLS=$(cygpath -aw '/cygdrive/c/Programmi/Microsoft Visual Studio 8/Common7/Tools/'); export VS80COMNTOOLS
VSINSTALLDIR=$(cygpath -aw '/cygdrive/c/Programmi/Microsoft Visual Studio 8'); export VSINSTALLDIR
VCINSTALLDIR=$(cygpath -aw '/cygdrive/c/Programmi/Microsoft Visual Studio 8/VC'); export VCINSTALLDIR
FrameworkDir=$(cygpath -aw '/cygdrive/c/WINDOWS/Microsoft.NET/Framework'); export FrameworkDir
FrameworkVersion='v2.0.50727'; export FrameworkVersion
FrameworkSDKDir=$(cygpath -aw '/cygdrive/c/Programmi/Microsoft Visual Studio 8/SDK/v2.0'); export FrameworkSDKDir

echo Setting environment for using Microsoft Visual Studio 2005 x86 tools.

DevEnvDir=$(cygpath -aw '/cygdrive/c/Programmi/Microsoft Visual Studio 8/Common7/IDE'); export DevEnvDir

PATH='/cygdrive/c/Programmi/Microsoft Visual Studio 8/Common7/IDE:/cygdrive/c/Programmi/Microsoft Visual Studio 8/VC/BIN:/cygdrive/c/Programmi/Microsoft Visual Studio 8/Common7/Tools:/cygdrive/c/Programmi/Microsoft Visual Studio 8/Common7/Tools/bin:/cygdrive/c/Programmi/Microsoft Visual Studio 8/VC/PlatformSDK/bin:/cygdrive/c/Programmi/Microsoft Visual Studio 8/SDK/v2.0/bin:/cygdrive/c/WINDOWS/Microsoft.NET/Framework/v2.0.50727:/cygdrive/c/Programmi/Microsoft Visual Studio 8/VC/VCPackages':$PATH
INCLUDE=$(cygpath -awp '/cygdrive/c/Programmi/Microsoft Visual Studio 8/VC/ATLMFC/INCLUDE:/cygdrive/c/Programmi/Microsoft Visual Studio 8/VC/INCLUDE:/cygdrive/c/Programmi/Microsoft Visual Studio 8/VC/PlatformSDK/include:/cygdrive/c/Programmi/Microsoft Visual Studio 8/SDK/v2.0/include'); export INCLUDE
LIB=$(cygpath -awp '/cygdrive/c/Programmi/Microsoft Visual Studio 8/VC/ATLMFC/LIB:/cygdrive/c/Programmi/Microsoft Visual Studio 8/VC/LIB:/cygdrive/c/Programmi/Microsoft Visual Studio 8/VC/PlatformSDK/lib:/cygdrive/c/Programmi/Microsoft Visual Studio 8/SDK/v2.0/lib'); export LIB
LIBPATH=$(cygpath -awp '/cygdrive/c/WINDOWS/Microsoft.NET/Framework/v2.0.50727:/cygdrive/c/Programmi/Microsoft Visual Studio 8/VC/ATLMFC/LIB'); export LIBPATH

я надеюсь, что это может помочь Вам.

2
ответ дан Peter Mortensen 28 November 2019 в 18:25
поделиться

Ни один из других ответов не работал на меня, но это сделало:

  1. Выполнение "Командная строка Сборки MS"

enter image description here

  1. выводит огибающий Вар: set > c:\temp\cl.env

  2. Открывают cygwin командную строку и создают source сценарий:

awk < /cygdrive/c/temp/cl.env -F= '{ if($1 !~ ")") print "export " $1 "=\x27" $2 "\x27" }' > cl.source
  1. Теперь, каждый раз, когда Вам нужна среда статьи от Вашей выполненной подсказки cygwin: source cl.source

  2. Дополнительно, источник cl.source в Вашем файл .bashrc для выполнения автоматически, когда Вы входите в систему

0
ответ дан 28 November 2019 в 18:25
поделиться

Я не мог добавлять комментарии к ответу Диомидиса :(, поэтому мне пришлось вместо этого опубликовать ответ. Я согласен с его ответом, но было бы утомительно «открыть командную строку», запустить Visual Studio / vcvars32.bat , а затем запустить Bash. Если вы не беспокоитесь о том, чтобы загромождать свою среду, лучшей альтернативой является изменение Cygwin.bat и его изменение, чтобы он выглядел примерно так:

@echo off
D:
chdir D:\cygwin\bin
"%VS71COMNTOOLS%\vsvars32.bat" && bash --login -i

Замените переменную среды VS71COMNTOOLS чем-то подходящим на вашем компьютере.

Нет необходимости открывать командную строку и запускать Bash вручную. Мне это решение очень нравится :). Я не мог отдать должное настоящему автору этого хака, так как не смог найти обратную ссылку на его статью, извините за это!

0
ответ дан 28 November 2019 в 18:25
поделиться

У меня работало следующее в .bash_profile:

"` cygpath -ua "$ VS80COMNTOOLS / vsvars32.bat" ""> NUL

0
ответ дан 28 November 2019 в 18:25
поделиться

Следуя предложениям в других ответах, я сделал различие в моем bash " установить "результаты с переменными MSVC и без них, и придумал следующий сценарий для их воспроизведения для моей установки Microsoft Visual C ++ 2010 Express. Я немного отредактировал его, чтобы поместить все зависящие от установки части наверху, так что, надеюсь, это может быть полезно другим.

# These lines will be installation-dependent.
export VSINSTALLDIR='C:\Program Files\Microsoft Visual Studio 10.0\'
export WindowsSdkDir='C:\Program Files\Microsoft SDKs\Windows\v7.0A\'
export FrameworkDir='C:\WINDOWS\Microsoft.NET\Framework\'
export FrameworkVersion=v4.0.30319
export Framework35Version=v3.5

# The following should be largely installation-independent.
export VCINSTALLDIR="$VSINSTALLDIR"'VC\'
export DevEnvDir="$VSINSTALLDIR"'Common7\IDE\'

export FrameworkDIR32="$FrameworkDir"
export FrameworkVersion32="$FrameworkVersion"

export INCLUDE="${VCINSTALLDIR}INCLUDE;${WindowsSdkDir}include;"
export LIB="${VCINSTALLDIR}LIB;${WindowsSdkDir}lib;"
export LIBPATH="${FrameworkDir}${FrameworkVersion};"
export LIBPATH="${LIBPATH}${FrameworkDir}${Framework35Version};"
export LIBPATH="${LIBPATH}${VCINSTALLDIR}LIB;"

c_VSINSTALLDIR=`cygpath -ua "$VSINSTALLDIR\\\\"`
c_WindowsSdkDir=`cygpath -ua "$WindowsSdkDir\\\\"`
c_FrameworkDir=`cygpath -ua "$FrameworkDir\\\\"`

export PATH="${c_WindowsSdkDir}bin:$PATH"
export PATH="${c_WindowsSdkDir}bin/NETFX 4.0 Tools:$PATH"
export PATH="${c_VSINSTALLDIR}VC/VCPackages:$PATH"
export PATH="${c_FrameworkDir}${Framework35Version}:$PATH"
export PATH="${c_FrameworkDir}${FrameworkVersion}:$PATH"
export PATH="${c_VSINSTALLDIR}Common7/Tools:$PATH"
export PATH="${c_VSINSTALLDIR}VC/BIN:$PATH"
export PATH="${c_VSINSTALLDIR}Common7/IDE/:$PATH"
12
ответ дан 28 November 2019 в 18:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: