无法从 Windows 批处理脚本构建 C 程序
Posted
技术标签:
【中文标题】无法从 Windows 批处理脚本构建 C 程序【英文标题】:Cannot build C program from Windows batch script 【发布时间】:2017-11-04 15:01:12 【问题描述】:我想使用 Windows 批处理脚本构建 C 程序,但编译器出现致命错误。
我有一台 Windows 10 计算机并使用 Microsoft C/C++ 编译器。
我正在运行的批处理脚本名为build.bat
,内容为:
SET PROJECT_COMPILER=cl
SET HOME_DIRECTORY=%~dp0
SET PROJECT_SRC=%HOME_DIRECTORY%src\
SET PROJECT_BIN=%HOME_DIRECTORY%bin\
SET PROJECT_INCLUDE=%HOME_DIRECTORY%include\
%PROJECT_COMPILER% "%PROJECT_SRC%*.c" /I"%PROJECT_INCLUDE%" /link
/out:"%PROJECT_BIN%out.exe"
del /f .\*.obj
我从%PROJECT_COMPILER% "%PROJECT_SRC%*.c" /I"%PROJECT_INCLUDE%" /link /out:"%PROJECT_BIN%out.exe"
行得到的输出是:
C:\Users\Andrea Nardi\Documents\C project\test_project>cl "C:\Users\Andrea Nardi\Documents\C project\test_project\src\*.c"
/I"C:\Users\Andrea Nardi\Documents\C project\test_project\include\" /link
/out:"C:\Users\Andrea Nardi\Documents\C project\test_project\bin\out.exe"
Microsoft (R) C/C++ Optimizing Compiler Version 19.11.25507.1 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
cl : Command line warning D9024 : unrecognized source file type
'Nardi\Documents\C', object file assumed
cl : Command line warning D9024 : unrecognized source file type
'project\test_project\bin\out.exe', object file assumed
main.c
Microsoft (R) Incremental Linker Version 14.11.25507.1
Copyright (C) Microsoft Corporation. All rights reserved.
/out:main.exe
main.obj
Nardi\Documents\C
project\test_project\bin\out.exe
LINK : fatal error LNK1181: cannot open input file 'Nardi\Documents\C.obj'
【问题讨论】:
目录名中的空格有问题。 【参考方案1】:看来C:\Users\Andrea Nardi\Documents\C project\
路径中的空格会导致您的问题。
通常避免项目路径中的空格,由于空格是命令行参数分隔符,这将成为各种陷阱的原因。
使用 relative 路径也简单得多,这样您就可以从任何地方而不是非常特定的文件夹构建项目,并避免使用空格。在这种情况下,类似于:
SET PROJECT_COMPILER=cl
REM Set working directory to that of this batch file
pushd %~dp0
REM Set paths relative to batch file path
SET PROJECT_SRC=.\src
SET PROJECT_BIN=.\bin
SET PROJECT_INCLUDE=.\include
REM Build...
%PROJECT_COMPILER% "%PROJECT_SRC%\*.c" /I"%PROJECT_INCLUDE%" /link
/out:"%PROJECT_BIN%\out.exe"
REM Clean-up...
del /f .\*.obj
REM Restore original working directory
popd
【讨论】:
以上是关于无法从 Windows 批处理脚本构建 C 程序的主要内容,如果未能解决你的问题,请参考以下文章
从 C++/Qt 程序在 Windows 中运行 Anaconda 脚本
iis发布网站 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。
ISS发布程序,出现:请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理解决方案