我在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,我应该使用美元符号的标量变量。搜索诸如“如何通过系统传递标量变量”这样的术语始终引导回堆栈溢出问题和答案。
试图使用变体(如'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
给你使用的Perl的版本号会好得多。 “最新”从来没有非常明确(最新版本是v5.25.5,但我怀疑你是否使用了这个版本),而且这个问题很可能会在很多新版本的Perl 5发布后出现。 – Borodin