windows - 如何调用传递给被调用程序的 VAR=$VAL 的系统?

标签 windows perl strawberry-perl

我在 Windows 7(已完全修补)上使用 Strawberry Perl(最新)。我正在尝试调用 nmake 来编译一个库。 makefile 没问题,我手动使用它。接下来我想自动化它。

我在正确使用 Perl 时遇到问题。我有以下内容:

#!/usr/bin/env perl

use strict;
use warnings;

my $DEBUG32_CXXFLAGS="/DDEBUG";

system('nmake', '/f', 'cryptest.nmake', 'CXXFLAGS="$DEBUG32_CXXFLAGS"');

结果是:

        cl.exe EBUG32_CXXFLAGS /Yc"pch.h" /Fp"pch.pch" /c pch.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 16.00.40219.01 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

cl : Command line warning D9024 : unrecognized source file type 'EBUG32_CXXFLAGS
', object file assumed
cl : Command line warning D9027 : source file 'EBUG32_CXXFLAGS' ignored
pch.cpp
        cl.exe EBUG32_CXXFLAGS /c cryptlib.cpp

根据 how to pass arguments to system command in perl ,我应该对标量变量使用美元符号。搜索诸如“如何通过系统传递标量变量”之类的术语会一直返回到 Stack Overflow 问答。

尝试使用变体,例如 'CXXFLAGS="DEBUG32_CXXFLAGS"''CXXFLAGS="${DEBUG32_CXXFLAGS}"' 等会导致类似的 Perl 中断。

我使用单引号是因为 system(nmake,/f, cryptest.nmake);system("nmake", "/f", "cryptest.nmake") 没有按预期工作。这些与引用的问题和答案很接近。

最终我将需要传递一个实名值对。这将更接近于 DEBUG_CXXFLAGS =/nologo/W4/wd4511/D_MBCS/Zi/TP/GR/EHsc/MD/FI sdkddkver.h/FI winapifamily.h

如何将 VAR=$VAL 作为参数传递给被调用程序来调用系统?

提前致谢


> perl.exe --version

This is perl 5, version 22, subversion 1 (v5.22.1) built for MSWin32-x64-multi-thread

最佳答案

变量仅在双引号字符串中展开。您可以在不包含变量的参数周围使用单引号,但您需要为包含变量的参数切换为双引号。

下一个问题是你想在使用双引号作为分隔符的字符串中包含一个双引号字符。为此,请使用反斜杠字符转义字符串中的每个双引号:

my $DEBUG32_CXXFLAGS="/DDEBUG";

system('nmake', '/f', 'cryptest.nmake', "CXXFLAGS=\"$DEBUG32_CXXFLAGS\"");

另一种方法是使用 qq 双引号运算符,它提供变量插值所需的双引号上下文,但允许您选择分隔符。在本例中,我选择使用大括号来分隔字符串:

system('nmake', '/f', 'cryptest.nmake', qq{CXXFLAGS="$DEBUG32_CXXFLAGS"});

更多详细信息可以在 Quote and Quote like Operators 上的文档中找到.

关于windows - 如何调用传递给被调用程序的 VAR=$VAL 的系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39810522/

相关文章:

windows - 路径::read_dir和Windows

linux - Perl 中的这个命令有什么作用?

perl - WWW::机械化和草莓 perl

windows - 无法安装 perl CPAN 模块 POSIX::strptime

perl - 如何在 Windows 7 中安装适用于 Strawberry Perl 的 Net::Pcap?

Windows bat 文件 : undo NET USE

c++ - 保持 ATL 服务运行的最佳方法是什么

java - Perl 客户端到 JAX-WS java 服务器问题

c - 拨号连接端口

xml - 我希望 XML::Twig 准确地打印出解析的内容