我遇到了以下问题,我想知道它将对我的Cygwin/GNU环境产生什么影响。我应该使用-o以外的名称来命名编译的输出吗?

是否采用了一些新标准,其他编译器是否遵守呢?

删除-o的动机是什么?

DOS提示符>输入compile.bat

cl.exe -D YY_MAIN=1 lex.yy.c libfl.obj -o foobar

DOS提示符>编译
cl.exe -D YY_MAIN=1 lex.yy.c libfl.obj -o foobar
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.
lex.yy.c
Microsoft (R) Incremental Linker Version 9.00.21022.08
Copyright (C) Microsoft Corporation.  All rights reserved.
/out:lex.yy.exe
/out:foobar.exe
lex.yy.obj
libfl.obj

cl:命令行警告D9035:选项'o'已被弃用,并将在以后的版本中删除

正如下面的答案所问,是不是试图在Windows和UNIX之间刻意地做一个裂痕?我希望不是。我希望我错过了所有编译器采用的一些新约定。

最佳答案

在此之后,我并不一定会看到一个邪恶的目的-更有可能是与兼容性相关的事情(也许-o正在干扰某些构建系统或某些大型Microsoft客户或其他人使用的其他系统。)

但是,当编译器供应商放弃根深蒂固的实践并学会反射时,这很烦人。

但是Microsoft编译器和Unix编译器之间的(语法上和哲学上的)差异大于简单的命令行开关。为此,您可以尝试摆脱简单的批处理构建脚本,转而使用Makefiles-或者更好的是,使用实际的跨平台构建系统,例如CMakeSCons(请注意,它们只是示例,我不是嫁给他们中的任何一个:))。

关于c - 为什么-o是从Microsoft编译器和链接器删除的候选对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/719878/

10-14 15:28
查看更多