C 编译器命令行模式设置技巧
- 格式:doc
- 大小:31.00 KB
- 文档页数:16
cmake--编译器设置前⾔cmake⽀持多种不同⽅式设置编译器标志:1.使⽤ target_compile_definitions()设置编译器标志2. 使⽤CMAKE_C_FLAGS和CMAKE_CXX_FLAGS设置编译标志⼀,⽬录结构├── CMakeLists.txt├── main.cpp* link:CMakeLists.txt[] - Contains the CMake commands you wish to run* link:main.cpp[] - The source file with main⼆,cmake脚本cmake_minimum_required(VERSION 3.5)# 设置默认C++编译标志set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DEX2" CACHE STRING "Set C++ Compiler Flags" FORCE)project (compile_flags)add_executable(cmake_examples_compile_flags main.cpp)# 使⽤target_compile_definitions设置编译标志target_compile_definitions(cmake_examples_compile_flagsPRIVATE EX3)三,扩展分析现代cmake(modern cmake)推荐使⽤target_compile_definitions设置C++编译标志。
因为target_compile_definitions能够设置编译标志的作⽤域,关键字INTERFACE,PUBLIC和PRIVATE⽤来指定其后参数的作⽤域。
PRIVATE 和 PUBLIC 项将产⽣ <target> 的 COMPILE_DEFINITIONS 属性。
如何⽤命令⾏编译c++程序作为程序员,如果仅仅只懂得如何在IDE上拖控件写程序,⽽不知道如何直接通过编译器编译程序的话。
虽然说也没啥⼤不了的,但是如果掌握了⼿动编译的技能,那肯定会是⼀种炫技般的存在。
从客观的⾓度来讲,⼀⽅⾯,这种技能帮你在同事或同学⾯前体现在⾃⼰的编程⽅⾯的“⾻灰级”地位。
另⼀⽅⾯,这种脱离了IDE的编译过程在你刷题的时候能帮你摆脱很多IDE上的恼⼈事故。
实际上,⽹上⼀找,确实有不少这个⽅⾯的⽂章,不过好多都是基于32位的win7或者win8的系统的,很不巧的是,本⼈的电脑是64位的win10系统。
在经历了很多次失后才终于将代码编译跑通。
真是⼀把⾟酸泪啊。
下⾯就介绍下如何在64位win10系统中⽤cmd+notepad进⾏编译c++程序。
1)设置环境变量:我们知道,⼀般的C/C++程序开发经历三个过程:源代码的编辑——编译⽣成.obj⽂件——链接⽣成.exe⽂件。
那么在这个过程中起到关键作⽤的就是编译器了,也就是我们要找到c++的编译器。
如果你已经安装好visual studio的话,那就直接在⽂件中找就⾏。
如果没有安装相应的安装包,那么我也会介绍另⼀种⽅法。
先说已经安装VS的情况:找到⽂件的安装⽬录底下,如E:\各种软件的安装⽬录\VS2015,具体要看你⾃⼰的软件安装⽬录。
⽽且基本上所有的VS版本,⽬录的名称都是⼏乎⼀致的,所以不⽤担⼼安装的版本路径名称会不⼀致的问题。
如果找到的话,你应该能看到:找到VC这个⽂件夹,当然你还能看到VB,VC#等,这些⽂件夹⾥包含了相关的语⾔环境包等,不⽤管,直接找到VC⾥的bin⽂件夹,然后将路径E:\各种软件的安装⽬录\VS2015\VC\bin加到系统的环境变量中去。
⾄于环境变量怎么弄的话,找到我的电脑,右键属性,然后找到⾼级系统设置->环境变量->系统变量->Path,新建⼀个,然后把路径添加进⾏就⾏。
这样做的⽬的,其实就是要让系统知道编译器在哪⾥,因为环境变量就是操作系统执⾏命令时的默认检索路径。
Borland C++ 5.5编译器命令行模式设定和用法BorlandC++5.5编译器命令行模式设定和用法荣耀2002冬在进行企业级软件开发时,没有强大的IDE协助是难以想像的。
但在进行语言特性测试和学习时,一个命令行模式编译工具就足够。
和IDE相比,命令行模式编译速度更快,你也很容易下载到免费的编译器和相关命令行工具。
本文将介绍Borland C++5.5编译器命令行模式设定和用法。
从Borland站点下载来的文件名为freecommandLinetools.exe,大小为8.52M,包含有命令行工具、RTL和STL动态链接库、Windows SDK、例子文件和帮助文档等。
无需额外安装步骤,将此压缩文件解压至任意目录均可。
我把它解压到e:\bcc中,生成如下目录和文件:BinExamplesHelpIncludeLiblicense.txtreadme.txt说明:下文描述的设定和用法,都是基于以上目录路径,假如你和我不一样,自己注意依样调整。
关于设置环境变量详细步骤,请参考《微软C/C++/C#编译器命令行模式设定和用法》中有关描述。
假如你使用的是Windows95/98,可以在autoexec.bat里,加入PATH=E:\BCC\BIN;%PATH%,假如是Windows2000/XP,请在环境变量PATH中加入E:\BCC\BIN。
我机器上完整PATH设置为:PATH=E:\WATCOM\BINW;F:\ORAHOME1\BIN;C:\PROG RAMFILES\ORACLE\JRE\1.1.7\BIN;E:\DELPHI\DELPHI5\PRO JECTS\BPL;E:\DELPHI\VBROKER\JRE\BIN;E:\DELPHI\V BROKER\BIN;E:\DELPHI\DELPHI5\BIN;%SYSTEMROOT %\SYSTEM32;%SYSTEMROOT%;%SYSTEMROOT%\S YSTEM32\WBEM;C:\PROGRAMFILES\MICROSOFT SQLSERVER\80\TOOLS\BINN;F:\ORAHOME1\ORB\BIN;E:\D UBA;C:\PROGRAM FILES\ATITECHNOLOGIES\ATI CONTROLPANEL;E:\BCC\BIN;E:\\VC7\BIN;E:\\COM MON7\IDE;E:\DMC\BIN\;E:\WATCOM\BINNT\;E:\DC\BIN\; E:\DC\LIB\GCC-LIB\MINGW32\3.2现在就可以打开一个“命令提示符”窗口,执行bcc32命令,你将会看到编译选项完整列表(参见附录一)。
一、system()--执行shell命令1、包含头文件:#include <stdlib.h>2、定义int system(const char * string);3、参数String:合法的可执行DOS(SHELL)命令4、返回值1)如果system()在调用/bin/sh 时失败则返回127, 其他失败原因返回-1。
2)若参数string 为空指针(NULL), 则返回非零值。
3)如果system()调用成功则最后会返回执行shell 命令后的返回值, 但是此返回值也有可能为system()调用/bin/sh 失败所返回的127, 因此最好能再检查errno 来确认执行成功。
5、说明system()会调用fork()产生子进程, 由子进程来调用/bin/sh-c string 来执行参数string 字符串所代表的命令, 此命令执行完后随即返回原调用的进程. 在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT 和SIGQUIT 信号则会被忽略。
6、用例system(“ipconfig/all”);7、重定向标准输出流FILE *stream;stream = freopen(“data.txt”,”wb”,stdout);运行结果可以重定向到data.txt8、隐藏控制台窗口#pragma comment( linker, “/subsystem:\”windows\”/entry:\”mainCRTStartup\”” )仍有调用的DOS窗口一闪,且重定向失效。
二、WinExec()—运行可执行程序1、包含头文件#include<windows.h>2、定义UINT Win Exec(LPCSTR lpCmdLine, UINT uCmdShow);3、参数lpCmdLine:指向一个空结束的字符串,串中包含将要执行的应用程序的命令行(文件名加上可选参数)。
C语言编译器gcc命令如何操作步骤C语言是一种高级编程语言,由于其结构化编程,声明式语法,高效性和可靠性,被广泛用于很多领域。
gcc是一种C语言编译器,是Unix系统中最常用的编译器之一,它可以编译C、C++、JAVA等语言。
本文将为读者介绍对于gcc编译器的基本概念、相关命令以及实践操作步骤。
一、gcc基本概念1. 什么是编译器?先来了解一下编译器的作用。
编译器是将高级语言编写的程序转换成计算机可执行的机器语言的软件程序。
程序员可以使用高级语言编写程序,编译器将高级语言转换成计算机能够理解的机器语言。
2. 什么是gcc?GCC是GNU编译器集合(GNU Compiler Collection)的缩写。
它是一个重要的语言编译器,可以编译C、C++、JAVA等语言的程序。
gcc包含了一系列的编译器,每一个编译器都可以编译不同的语言,它不仅是Linux系统中的常用编译器,也被广泛使用于其他操作系统中。
3. gcc优点- 开源软件:可以透明、高效地利用计算机系统资源,让整个编译过程更灵活。
- 软件体积小:由于每次都是重新编译,因此gcc生成的二进制文件体积很小。
- 可移植性:gcc可以在不同的操作系统上进行编译。
同一份源代码,在不同的系统上编译,可以得到相同的结果。
- 动态链接库:gcc支持动态链接库,可以减少程序的代码冗余问题。
二、gcc常用命令以下是gcc编译器的常用命令:1. gcc -ogcc命令使用" -o"选项可以把源文件编译成可执行文件,例如:```$ gcc -o hello hello.c```上述命令的含义是将hello.c文件编译成hello可执行文件。
2. gcc -cgcc命令使用" -c"选项将源文件编译成目标文件。
目标文件是不可执行的文件,它包含了已经编译过的程序的一部分,这些程序可以用作最终的可执行文件中的一部分。
例如:```$ gcc -c hello.c```上述命令的含义是将hello.c文件编译成目标文件hello.o。
如何用命令行(CMD)编译运行CC++程序IDE(集成开发环境)提高了软件开发的效率但是,要想成为一名非常专业的程序员,不懂手动编译程序是不太合适的羡慕人家只需要通过记事本就能写程序么?总之,当初我觉得那些人真的很牛,俗称“骨灰级别的程序员”我们知道,一般的C/C++程序开发经历三个过程:源代码的编辑——编译生成.obj文件——链接生成.exe文件这是铁的规律,就算是用VC等集成环境,也必须经历这三个步骤。
只不过,IDE提供的图形化用户界面更加方便而已。
但本质上是不会变的最近电脑重装了下系统,于是我又重新把开发环境弄了下。
每一步我都截图了,希望这次可以让想学习的人看明白。
以下所有步骤,都是根据我自己的PC情况来进行的。
如果和你的PC有出入,请自己参照修改。
打开CMD,此时默认的所在路径一般是在C盘,如图此时,我们不能访问到VC自带的编译器cl.exe。
我把VC安装在D盘下,完全路径为:D:\Program Files\Microsoft Visual Studio编译器cl.exe在路径D:\Program Files\Microsoft Visual Studio\VC98\Bin编译程序出了需要编译器外,还需要提供系统库文件.lib,系统头文件。
库文件在目录D:\Program Files\Microsoft Visual Studio\VC98\Lib头文件在D:\Program Files\Microsoft Visual Studio\VC98\Include现在你需要编写一个批处理文件.bat内容如下[plain]view plaincopyprint?1.PATH = D:\Program Files\Microsoft Visual Studio\VC98\B in2.INCLUDE = D:\Program Files\Microsoft Visual Studio\VC9 8\Include3.LIB = D:\Program Files\Microsoft Visual Studio\VC98\Lib保存为path.bat然后运行该文件,会提示你错误,缺少文件你可能并不知道这个文件是什么,也不知道这个文件被放在什么目录下。
C#命令行(CSC.EXE) 编译器选项(Framework 1.1)Microsoft Visual Studio .NET 2003 IDE在给我们编程带来方便的同时,也带给了我们无知,在没有vs2003的情况下怎么编译我们的C#文件呢?还是回到原始的命令行编译吧。
下面我将把Framework1.1中的编译命令全部介绍一下。
第一部分:命令介绍。
选项用途@ 指定响应文件。
/? 列出编译器选项到stdout。
/addmodule 指定一个或多个模块作为此程序集的一部分。
/baseaddress 指定加载DLL 的首选基址。
/bugreport 创建一个包含信息(该信息便于报告错误)的文件。
/checked 指定溢出数据类型边界的整数算法是否将在运行时导致异常。
/codepage 指定编译中的所有源代码文件所使用的代码页。
/debug 发出调试信息。
/define 定义预处理器符号。
/doc 处理XML 文件的文档注释。
/filealign 指定输出文件中节的大小。
/fullpaths 指定编译器输出中的文件的绝对路径。
/help 列出编译器选项到stdout。
/incremental 启用源代码文件的增量编译。
/lib 指定通过/reference 引用的程序集的位置。
/linkresource 创建指向托管资源的链接。
/main 指定Main 方法的位置。
/noconfig 不要使用csc.rsp 进行编译。
/nologo 取消显示编译器版权标志信息。
/nostdlib 不导入标准库(mscorlib.dll)。
/nowarn 禁用编译器生成指定警告的能力。
/optimize 启用/禁用优化。
/out 指定输出文件。
/recurse 搜索子目录中要编译的源文件。
/reference 从包含程序集的文件中导入元数据。
/resource 将.NET Framework 资源嵌入到输出文件中。
/target 使用下面的四个选项之一指定输出文件的格式:/target:exe/target:library/target:module/target:winexe/unsafe 编译使用unsafe 关键字的代码。
如何在命令行下编译VC程序最近电脑装的东西太多了,编译一个程序都好半天,实在没办法,只能在命令行下了,这样还能快一点。
(应该对我机器来说快很多啊。
O(∩_∩)o)闲言少叙。
第一步:设置环境变量。
我的电脑,右击,-> 属性 ->高级->环境变量 ->新建变量名:include值:E:\Program Files\Microsoft Visual Studio\VC98\atl\include;E:\Program Files\Microsoft Visual Studio\VC98\mfc\include;E:\Program Files\Microsoft Visual Studio\VC98\include变量名:lib值:E:\Program Files\Microsoft Visual Studio\VC98\mfc\lib;E:\Program Files\Microsoft Visual Studio\VC98\lib这个值是你自己的C++的安装目录。
在这里加入这两个变量当然,你也可以在系统变量中添加这两个变量,这样所有这台机器上的用户都可以使用了。
都做完以后,这时就去命令行下试验一下吧。
键入cl /?会出现一大堆参数,具体含义大家自己摸索吧,我英语不好,这里就不误导大家了。
一个实例,当然还是Hello World了打开记事本,敲入以下程序,重名为Hello.cpp#include<iostream.h>int main(){cout << "HelloWorld!" << endl;return 0;}进入命令行,找到该文件所在目录,键入cl Hello.cpp,然后键入Hello.exe于是乎,熟悉的Hello World 出现了。
编译多文件程序怎么办?其实加个通配符就欧了。
如下:cl *.cpp由于手头没有比较大规模的程序,就不跟大家演示了。
vs2008命令行编译C一、命令行下运行创建 Visual C++ 源文件并在命令行上对其进行编译打开“Visual Studio 2008 命令提示”窗口。
单击“开始”按钮,指向“所有程序”,指向“Microsoft Visual Studio 2008”,指向“VisualStudio 工具”,然后单击“Visual Studio 2008 命令提示”。
注意:“Visual Studio 2008 命令提示”自动设置了 Visual C++ 编译器和所需的任何库的正确路径。
应使用它而不是使用普通的“命令提示符”窗口。
(如果是编译已经存在的源文件,只要进入原c++源文件所在的目录进行编译即可)在命令提示符下,键入notepad simple.cpp,并按Enter。
在系统提示是否创建新文件时,单击“是”。
在记事本中,键入下列各行:#include <iostream>int main(){std::cout << "This is a native C++ program." << std::endl;return 0;}下面代码等效于上面代码#include <iostream>using namespace std;int main(){cout << "This is a native C++ program." << endl;return 0;}在“文件”菜单上单击“保存”。
这样就创建了一个Visual C++ 源文件。
在“文件”菜单上,单击“退出”以关闭记事本。
在命令提示符下,键入cl /EHsc simple.cpp,并按Enter。
/EHsc 命令行选项指示编译器启用 C++ 异常处理。
有关更多信息,请参见 /EH(异常处理模型)。
cl.exe 编译器生成了一个可执行程序 simple.exe。
微软C/C++/C#编译器命令行模式设定和用法微软C/C++/C#编译器命令行模式设定和用法和在IDE中编译相比,命令行模式编译速度更快,并可以避免被IDE产生的一些附加信息所干扰。
本文将介绍微软C/C++/C#编译器命令行模式设定和用法。
操作系统为Windows 2000 。
一.微软C/C++编译器命令行模式设定方法一1.参照如下内容(根据你的系统情况,作出相应修改),编写一个批处理文件,假定命名为vs.bat。
@echo offset PATH=C:\WINNT\SYSTEM32;D:\\VC7\BIN;D:\\COMMON7\IDEset INCLUDE=D:\\VC7\INCLUDEset LIB=D:\\VC7\LIB说明:a.以上各环境变量字符串大小写无所谓,但字符之间应避免出现空格。
b.之所以加上C:\WINNT\SYSTEM32,目的是为了便于使用help之类的扩展命令,和本讨论主题并无直接关系。
2.打开一个“命令提示符”窗口,执行如下命令:C:\>start c:\vc7.bat (根据你的文件路径,作出相应修改)即会创建一个新的“命令提示符”窗口,在这个窗口内,便可进行C++程序编译工作。
具体用法,后面再说。
这种设置方法的缺点在于,只能在步骤2新创建的“命令提示符”窗口里进行编译,一旦关闭该窗口,即需要重新执行步骤2。
方法二1.在桌面“我的电脑”图标上,单击右键,然后执行“属性”菜单命令,或者,依照“开始”-“设置”-“控制面板”步骤,双击“系统”图标,都会弹出“系统特性”对话框。
选中“高级”页面,点击“环境变量”按钮,即会出现图1所示的环境变量设置窗口。
(说明:任何用户都可以增/删/改用户环境变量,但只有管理员才能增/删/改系统环境变量。
对于特定计算机的每个用户来说,用户环境变量可以不相同)图12.你可以设置为用户环境变量,也可以设置为系统环境变量。
参考以下内容,并参见图2所示界面。
使用C# 2.0 命令行编译器发布日期: 12/22/2004 | 更新日期: 12/22/2004Andrew W. Troelsen,Microsoft MVPIntertech Training摘要:本文分析了使用C# 命令行编译器csc.exe 生成应用程序的过程。
同时,还将向读者介绍很多为C# 2.0 独有的编译器选项,例如,extended/reference 标志和强名称支持。
阅读完本文的内容之后,您将能够轻松地在没有向导的环境中生成单文件程序集和多文件程序集。
适用于:Microsoft Visual C# 2.0注本文假定您熟悉C# 编程语言和 .NET Framework 的结构。
体验一下使用命令行工具的感觉还将证明很有帮助。
下载 CSCSample.msi 文件。
本页内容scsc.exe 带来的乐趣C# 编译器选项概览配置环境变量命令行基础知识用于指定输入和控制输出的选项编译 .NET 代码库使用 C# 响应文件使用 /reference 引用外部程序集理解 C# 2.0 引用别名使用 /addmodule 生成多文件程序集创建 Windows 窗体应用程序通过 csc.exe 使用资源使用 /define 定义预处理器符号csc.exe 的以调试为中心的选项杂项小结scsc.exe 带来的乐趣几乎没有人会否认集成开发环境(IDE)(例如,Visual Studio 2005 和Visual C# Express 2005)所提供的能使编程工作变得相当简单的诸多功能。
但是,实际上IDE 自己通常不能提供对基础编译器的所有方面的访问。
例如,Visual Studio 2005 不支持生成多文件程序集。
此外,了解在命令行编译代码的过程,对于具有以下特征的用户可能有用:•偏爱最简单的生成 .NET Framework 应用程序的方法。
•希望揭开IDE 处理源代码文件的方法的秘密。
•希望利用 .NET 生成实用工具,例如,nant或msbuild。
C语言命令行简明教程C语言作为一种被广泛应用于系统开发、嵌入式领域以及科学计算等领域的编程语言,具有高效、灵活和强大的特点。
其中,命令行编程是C语言最常用的方式之一。
本教程将向您介绍C语言命令行编程的基础知识和常用方法。
一、什么是命令行编程在计算机编程中,命令行编程是指通过命令行界面(Command Line Interface)输入指令和参数来与计算机进行交互的一种编程方式。
C语言提供了与命令行交互的函数和库,方便程序员开发各种应用程序。
二、命令行参数的获取在C语言中,通过main函数的参数来获取命令行参数。
main函数的原型如下:```int main(int argc, char *argv[])```其中,argc表示命令行参数的数量,argv是一个指向字符串数组的指针,每个字符串表示一个命令行参数。
下面是一个示例:```c#include <stdio.h>int main(int argc, char *argv[])int i;for(i=0; i<argc; i++){printf("参数%d: %s\n", i, argv[i]);}return 0;}```在上面的示例中,我们使用了一个循环来遍历所有命令行参数,并通过printf函数将其输出到屏幕上。
三、标准输入输出C语言提供了标准输入输出库(stdio.h),可以通过命令行进行输入输出操作。
常用的函数包括printf、scanf和getchar等。
1. printf函数printf函数用于向屏幕输出内容。
下面是一个示例:```c#include <stdio.h>int main()int num = 10;printf("数字: %d\n", num);return 0;}```在上面的示例中,我们使用了printf函数将num的值输出到屏幕上。
2. scanf函数scanf函数用于从命令行获取输入,并将其存储到变量中。
vc怎么运行系统命令行
工作中的一些问题需要使用cmd命令,不过dos下重复操作实在令人头疼,就想在VC中使用cmd命令。
下面就让店铺教大家怎么用vc来运行系统命令行。
VC运行系统命令行的方法
要使用cmd程序,需要在头文件中加上#include "stdlib.h",然后使用system("");其中“”中的内容就是cmd执行的内容。
cmd命令使用中最基本得就是切换目录,找到你需要执行.exe所在的文件夹,如果没有的话会在windows中找寻,如果还是没有就会报没有找到指定系统路径。
dos界面的默认环境是不是和c程序执行环境一样,用dir可以看下,上面显示的是执行程序所在的文件夹。
这里我需要切换目录到另外一个文件夹,如是按照cmd的操作,直接在里面加上CD F:\EX,运行后就发现系统无法找到指定路径,但是在dos下是没问题的,仔细看下VC中有警告提示,里面含有转义字符。
在C中\有\n,\r等,\后字符会成为转义字符,所以准确的转换应该是\\,运行没有问题。
因为上面看不到情况,加个dir显示下,如果执行多条语句,可以用&&连接,运行后就可以看到切换成功。
c 调节编译C语言是一种广泛应用于编程领域的编程语言,它具有灵活性和高效性的特点。
在C语言中,调节编译是一个重要的概念,它可以对程序的执行过程进行优化和改进。
调节编译可以分为两个阶段:编译和链接。
在编译阶段,源代码将被转换成机器代码,这是计算机可以执行的代码形式。
编译器将源代码中的语句转换为机器指令,并检查语法错误和类型错误。
在链接阶段,编译器将各个源文件中的机器代码进行合并,并解决函数和变量的引用问题。
在C语言中,调节编译可以通过多种方式进行。
一种常见的方式是使用编译选项来控制编译器的行为。
例如,可以使用优化选项来提高代码的执行效率,或者使用调试选项来增加调试信息。
编译选项可以通过命令行参数或者配置文件进行设置。
调节编译还可以通过使用预处理器指令来实现。
预处理器指令是在编译阶段之前执行的一系列操作,包括宏定义、条件编译和文件包含等。
预处理器指令可以根据不同的需求来调整代码的编译过程,从而实现对编译过程的控制。
除了调节编译,C语言还提供了一些其他的特性来优化程序的执行效率。
例如,可以使用内联函数来减少函数调用的开销,使用循环展开来减少循环的迭代次数,使用位操作来加速位运算等。
这些技术可以在一定程度上提高程序的执行速度和效率。
在实际编程中,调节编译是非常重要的。
通过合理地选择编译选项和使用预处理器指令,可以使程序更加高效地运行。
调节编译还可以帮助开发人员发现潜在的问题和错误,并提供更好的调试信息。
总结来说,C语言调节编译是优化程序执行过程的重要手段。
通过合理地选择编译选项和使用预处理器指令,可以提高程序的执行效率和效果。
在实际编程中,我们应该充分利用调节编译的功能,以达到优化程序性能的目的。
关于C#编译器的命令⾏参数我们⽤命令⾏编译程序的时候,如果程序当中使⽤了其他的动态链接库,那么就要⽤/resource命令⾏开关指定程序中⽤到的动态链接库,⽅法如下:csc /r:thirdparty.dll myapp.cs可是为何,我们在编译普通程序的时候,不需要⽤下⾯的命令来引⽤.netFramework的动态库?csc /r:System.dll simpleApp.cs原因是csc.exe编译器程序使⽤了⼀个资源配置⽂件,该配置⽂件设置了⼀些标准的命令⾏参数,其中包括要引⽤的默认的DLL⽂件。
这个配置⽂件是csc.rsp,它与csc.exe位于同⼀个⽬录下:说明:如果系统中安装了Visual 2003的话,csc.exe位于C:\WINDOWS\\Framework\v1.1.4322⽬录下# This file contains command-line options that the C## command line compiler (CSC) will process as part# of every compilation, unless the "/noconfig" option# is specified.# Reference the common Framework libraries/r:Accessibility.dll/r:Microsoft.Vsa.dll/r:System.Configuration.Install.dll/r:System.Data.dll/r:System.Design.dll/r:System.DirectoryServices.dll/r:System.dll/r:System.Drawing.Design.dll/r:System.Drawing.dll/r:System.EnterpriseServices.dll/r:System.Management.dll/r:System.Messaging.dll/r:System.Runtime.Remoting.dll/r:System.Runtime.Serialization.Formatters.Soap.dll/r:System.Security.dll/r:System.ServiceProcess.dll/r:System.Web.dll/r:System.Web.Mobile.dll/r:System.Web.RegularExpressions.dll/r:System.Web.Services.dll/r:System.Windows.Forms.Dll/r:System.XML.dll⽤户也可以使⽤/noconfig命令⾏开关,让csc.exe编译器不使⽤csc.rsp配置⽂件,⽅法如下:csc /noconfig /r:System.dll simpleApp.cs。
不常见但是很有用的gcc命令行选项软件工具通常情况下会提供多个功能以供选择,但是如你所知的,不是所有的功能都能被每个人用到的。
公正地讲,这并不是设计上的错误,因为每个用户都会有自己的需求,他们只在他们的领域内使用该工具。
然而,深入了解你所使用的工具也是很有益处的,因为你永远不知道它的某个功能会在什么时候派上用场,从而节省下你宝贵的时间。
举一个例子:编译器。
一个优秀的编程语言编译器总是会提供极多的选项,但是用户一般只知道和使用其中很有限的一部分功能。
更具体点来说,比如你是C 语言开发人员,并将Linux 作为你的开发平台,那么你很有可能会用到gcc编译器,这个编译器提供了(几乎) 数不清的命令行选项列表。
你知道,你可以让gcc保存每个编译阶段的输出吗?你知道用于生成警告的-Wall 选项,它并不会包含一些特殊的警告吗?gcc的很多命令行选项都不会经常用到,但是它们在某些特定的情况下会变得非常有用,例如,当你在调试代码的时候。
所以在本文中,小编会介绍这样的几个选项,提供所有必要的细节,并通过简单易懂的例子来解释它们。
本文中所有的例子所使用的环境基于Ubuntu 16.04 LTS 操作系统,gcc版本为5.4.0。
在每个编译阶段查看中间代码的输出你知道在通过gcc编译c 语言代码的时候大体上共分为四个阶段吗?分别为预处理->编译->汇编->链接。
在每个阶段之后,gcc都会产生一个将移交给下一个阶段的临时输出文件。
但是生成的都是临时文件,因此我们并不能看到它们——我们所看到的只是我们发起编译命令,然后它生成的我们可以直接运行的二进制文件或可执行文件。
但是比如说在预处理阶段,如果调试时需要查看代码是如何进行处理的,你要怎么做呢?好消息是gcc编译器提供了相应的命令行选项,你可以在标准编译命令中使用这些选项获得原本被编译器删除的中间文件。
我们所说的选项就是-save-temps。
以下是gcc手册中对该选项的介绍:永久存储临时的中间文件,将它们放在当前的文件夹下并根据源文件名称为其命名。
C语⾔编程C++编辑器及调试⼯具操作命令详解⽬录⼀、GCC编译器1、GNU⼯具2、GCC简介3、GCC编译器的版本4、gcc所⽀持后缀名解释5、编译器的主要组件6、GCC的基本⽤法和选项7、GCC的错误类型及对策8、GCC编译过程条件编译⼆、GDB调试⼯具1、Gdb调试流程:2、进⼊代码调试模式后⼀、GCC编译器1、GN U⼯具编译⼯具:把⼀个源程序编译成为⼀个可执⾏程序。
调试⼯具:能对执⾏程序进⾏源码及汇编级调试。
软件⼯程⼯具:⽤于协助多⼈开发或⼤型软件项⽬的管理,如make、CVS、Subvision其他⼯具:⽤于把多个⽬标⽂件链接成可执⾏⽂件的链接器,或者⽤作格式转换的⼯具。
2、GCC简介全称为GNU CC ,GNU项⽬中符合ANSI C标准的的编译系统。
编译如C、C++、Object C 、Java、Fortran 、Pascal、Modula-3和Ada等多种语⾔。
GCC是可以在多种硬件平台上编译出可执⾏程序的超级编译器,其执⾏效率与⼀般的编译器相⽐平均效率要⾼20%~30%。
⼀个交叉平台编译器,适合在嵌⼊式领域的开发编译3、GCC编译器的版本4、gcc所⽀持后缀名解释.c ----- C原始程序.C/.cc/.cxx ----- C++原始程序.m ----- Objective-C原始程序.i ----- 已经预处理过的 C原始程序.ii ----- 已经预处理过的C++原始程序.s/.S ----- 汇编语⾔原始程序.h ----- 预处理⽂件(头⽂件).o ----- ⽬标⽂件.a/.so ----- 编译后的库⽂件5、编译器的主要组件分析器:分析器将源语⾔程序代码转换成汇编语⾔。
因为要从⼀种格式转换成为另⼀种格式(C到汇编),所以分析器需要知道⽬标机器的汇编语⾔。
汇编器:汇编器将汇编语⾔代码转换成为CPU可以执⾏字节码。
链接器:链接器将汇编器⽣成的单独的⽬标⽂件组合成可执⾏的应⽤程序。
微软C/C++/C#编译器命令行模式设定和用法微软C/C++/C#编译器命令行模式设定和用法和在IDE中编译相比,命令行模式编译速度更快,并可以避免被IDE产生的一些附加信息所干扰。
本文将介绍微软C/C++/C#编译器命令行模式设定和用法。
操作系统为Windows 2000 。
一.微软C/C++编译器命令行模式设定方法一1.参照如下内容(根据你的系统情况,作出相应修改),编写一个批处理文件,假定命名为vs.bat。
@echo offset PATH=C:\WINNT\SYSTEM32;D:\\VC7\BIN;D:\\COMMON7\IDEset INCLUDE=D:\\VC7\INCLUDEset LIB=D:\\VC7\LIB说明:a.以上各环境变量字符串大小写无所谓,但字符之间应避免出现空格。
b.之所以加上C:\WINNT\SYSTEM32,目的是为了便于使用help之类的扩展命令,和本讨论主题并无直接关系。
2.打开一个“命令提示符”窗口,执行如下命令:C:\>start c:\vc7.bat (根据你的文件路径,作出相应修改)即会创建一个新的“命令提示符”窗口,在这个窗口内,便可进行C++程序编译工作。
具体用法,后面再说。
这种设置方法的缺点在于,只能在步骤2新创建的“命令提示符”窗口里进行编译,一旦关闭该窗口,即需要重新执行步骤2。
方法二1.在桌面“我的电脑”图标上,单击右键,然后执行“属性”菜单命令,或者,依照“开始”-“设置”-“控制面板”步骤,双击“系统”图标,都会弹出“系统特性”对话框。
选中“高级”页面,点击“环境变量”按钮,即会出现图1所示的环境变量设置窗口。
(说明:任何用户都可以增/删/改用户环境变量,但只有管理员才能增/删/改系统环境变量。
对于特定计算机的每个用户来说,用户环境变量可以不相同)图12.你可以设置为用户环境变量,也可以设置为系统环境变量。
参考以下内容,并参见图2所示界面。
(根据你系统的情况,作出相应调整)PATH=C:\WINNT\SYSTEM32;D:\\VC7\BIN;D:\\COMMON7\IDEINCLUDE=D:\\VC7\INCLUDELIB=D:\\VC7\LIB图2和方法一不同的是,采用这种方式,一旦设置完毕,便可一劳永逸。
无需重新启动计算机,现在就打开一个“命令提示符”窗口,执行cl命令试试。
说明:假如你的操作系统是Windows 95/98,可以参照上面描述,直接编辑autoexec.bat文件。
二.Visual C# .NET编译器命令行模式设定C#编译器命令行模式设定方法大同小异,具体不再赘述,只需在PATH后面加上C:\WINNT\\FRAMEWORK\如下:PATH=C:\WINNT\SYSTEM32;D:\\VC7\BIN;D:\\COMMON7\IDE;C:\WINNT\MICRO \FRAMEWORK\;D:\\FRAMEWORKSDK\BIN;D:\BCC55\BIN;E:\ORACLE\ORA81\BIN三.微软C/C++编译器命令行模式用法微软C/C++编译器编译选项数目众多,在“命令提示符”窗口键入cl /?即可查看完整列表(见附录1)。
比如说,/GX启用C++异常处理机制,/GR启用C++ RTTI,等等。
在此不打算详细讨论这些编译选项用法。
以下是我的测试目录f:\vstest中的一个样例文件://1.cpp#include <iostream>using namespace std;void main(){cout << "Hello Royal"<<endl;}你现在可以进入该目录执行如下编译命令:F:\vstest>cl /GX 1.cpp运行程序,即会产生如下输出:Hello Royal编译多个文件也很简单,参见下面例子://2.cpp#include <iostream>#include "3.cpp"using namespace std;void main(){CTest ct("Hello ");cout << ct.str << endl;}//3.cpp#include <string>using namespace std;class CTest{public:CTest(string strValue): str(strValue){}string str;};执行如下编译命令即可:F:\vstest>cl /GX 2.cpp 3.cpp也可以这样编译,以指定生成的exe名字:F:\vstest>cl /GX /FeHello.exe 2.cpp 3.cpp (生成Hello.exe)运行程序,输出结果如下:Hello四.Visual C# .NET编译器命令行模式用法在“命令提示符”窗口键入csc /?即可查看完整编译选项列表(见附录2)。
在此不打算详细讨论这些编译选项用法。
不过,要说明的是,你之所以无需使用/r:编译选项引用相关库文件,就可以编译绝大多数程序,原因在于C#编译器默认引用了mscorlib.dll以及csc.rsp文件中指定的程序库。
该文件内容如下:# This file contains command-line options that the C## command line compiler (CSC) will process as part# of every compilation, unless the "/noconfig" option# is specified.# Reference the common Framework libraries/r:Accessibility.dll/r:/r:/r:/r:/r:/r:System.dll/r:/r:/r:/r:/r:/r:/r:/r:/r:/r:/r:/r:/r:/r:可见,它引用了许多.NET标准库,假如没有充足的理由,就不要修改这个配置文件!但我修改了我机器上的csc.rsp文件,它的尾部多了这两行:#NUnit is a unit-testing framework for all .Net languages/r:d:\Nunitv2.0\bin\注意,文件路径中不可有空格。
例如,Nunit2.0默认安装主目录为Nuint v2.0,假如不做必要的更改(我改成了Nunitv2.0),将无法成功引用,并将导致整个csc命令行编译器无法使用,小心!假如要取消对mscorlib.dll或csc.rsp引用的话,可以使用/nostdlib或/noconfig编译选项。
以下是我的测试目录f:\vstest中的一个样例文件://4.csusing System;namespace _4{class Class1{[STAThread]static void Main(string[] args){Console.WriteLine("Hello Royal");}}}执行如下编译命令:F:\vstest>csc 4.cs运行程序,即输出:Hello Royal以下是编译多个文件的例子://5.csusing System;using _6;namespace _5{class Class5{[STAThread]static void Main(string[] args){Class6 c6 = new Class6("Hello ");Console.WriteLine(c6.str);}}}//6.csusing System;namespace _6{class Class6{public Class6(string strValue) {str = strValue;} public string str;}}执行如下编译命令:F:\vstest>csc 5.cs 6.cs也可以这样编译,以指定生成的exe文件名字:F:\vstest>csc /out:Hello.exe 5.cs 6.cs运行程序,即会输出如下字样:Hello附录一(更详细信息,可查阅MSDN)微软C/C++ 编译器选项-优化-/O1最小化空间/Op[-]改善浮点数一致性/O2最大化速度/Os优选代码空间/Oa假设没有别名/Ot优选代码速度/Ob<n>内联展开(默认 n=0)/Ow假设交叉函数别名/Od禁用优化(默认值)/Ox最大化选项。
(/Ogityb2 /Gs) /Og启用全局优化/Oy[-]启用框架指针省略/Oi启用内部函数-代码生成-/G3为 80386 进行优化/GH启用 _pexit 函数调用/G4为 80486 进行优化/GR[-]启用 C++ RTTI/G5为 Pentium 进行优化/GX[-]启用 C++ EH(与 /EHsc 相同)/G6为 PPro、P-II、P-III 进行优化/EHs启用 C++ EH(无 SEH 异常)/GB为混合模型进行优化(默认)/EHa启用 C++ EH(w/ SEH 异常)/Gd__cdecl 调用约定/EHc外部“C”默认为 nothrow/Gr__fastcall 调用约定/GT生成纤维安全 TLS 访问/Gz__stdcall 调用约定/Gm[-]启用最小重新生成/GA为 Windows 应用程序进行优化/GL[-]启用链接时代码生成/Gf启用字符串池/QIfdiv[-]启用 Pentium FDIV 修复/GF启用只读字符串池/QI0f[-]启用 Pentium 0x0f 修复/Gy分隔链接器函数/QIfist[-]使用 FIST 而不是 ftol()/GZ启用堆栈检查 (/RTCs)/RTC1启用快速检查 (/RTCsu)/Ge对所有函数强制堆栈检查/RTCc转换为较小的类型检查/Gs[num]控制堆栈检查调用/RTCs堆栈帧运行时检查/GS启用安全检查/RTCu未初始化的本地用法检查/Gh启用 _penter 函数调用/clr[:noAssembly]为公共语言运行时库编译noAssembly - 不产生程序集-输出文件-/Fa[file]命名程序集列表文件/Fo<file>命名对象文件/FA[sc]配置程序集列表/Fp<file>命名预编译头文件/Fd[file]命名 .PDB 文件/Fr[file]命名源浏览器文件/Fe<file>命名可执行文件/FR[file]命名扩展 .SBR 文件/Fm[file]命名映射文件-预处理器-/AI<dir>添加到程序集搜索路径/Fx将插入的代码合并到文件/FU<file>强制使用程序集/模块/FI<file>命名强制包含文件/C不抽出注释/U<name>移除预定义宏/D<name>{=|#}<text>定义宏/u移除所有预定义宏/E预处理到 stdout/I<dir>添加到包含搜索路径/EP预处理到 stdout,没有 #line /X忽略“标准位置”/P预处理到文件-语言-/Zi启用调试信息/Zl忽略 .OBJ 中的默认库名/ZI启用“编辑并继续”调试信息/Zg生成函数原型/Z7启用旧式调试信息/Zs只进行语法检查/Zd仅有行号调试信息/vd{0|1}禁用/启用 vtordisp/Zp[n]在 n 字节边界上包装结构/vm<x>指向成员的指针类型/Za禁用扩展(暗指 /Op)/noBool禁用“bool”关键字/Ze启用扩展(默认)/Zc:arg1[,arg2]C++ 语言一致性,这里的参数可以是:forScope - 对范围规则强制使用标准 C++;wchar_t - wchar_t 是本机类型,不是 typedef- 杂项 -@<file>选项响应文件/wo<n>发出一次警告 n/?, /help打印此帮助消息/w<l><n>为 n 设置警告等级 1-4/c只编译,不链接/W<n>设置警告等级(默认 n=1)/H<num>最大外部名称长度/Wall启用所有警告/J默认 char 类型是 unsigned /Wp64启用 64 位端口定位警告/nologo取消显示版权消息/WX将警告视为错误/showIncludes显示包含文件名/WL启用单行诊断/Tc<source file>将文件编译为 .c/Yc[file]创建 .PCH 文件/Tp<source file>将文件编译为 .cpp/Yd将调试信息放在每个 .OBJ 中/TC将所有文件编译为 .c/Yl[sym]为调试库插入 .PCH 引用/TP将所有文件编译为 .cpp/Yu[file]使用 .PCH 文件/V<string>设置版本字符串/YX[file]自动 .PCH/w禁用所有警告/Y-禁用所有 PCH 选项/wd<n>禁用警告 n/Zm<n>最大内存分配(默认为 %)/we<n>将警告 n 视为错误-链接-/MD与 MSVCRT.LIB 链接/MDd与 MSVCRTD.LIB 调试库链接/ML与 LIBC.LIB 链接/MLd与 LIBCD.LIB 调试库链接/MT与 LIBCMT.LIB 链接/MTd与 LIBCMTD.LIB 调试库链接/LD创建 .DLL/F<num>设置堆栈大小/LDd创建 .DLL 调试库/link[链接器选项和库]附录二(更详细信息,可查阅MSDN)Visual C# .NET 编译器选项- 输出文件 -/out:<文件>输出文件名(默认值:包含主类的文件或第一个文件的基名称)/target:exe生成控制台可执行文件(默认) (缩写: /t:exe)/target:winexe生成 Windows 可执行文件 (缩写: /t:winexe)/target:library生成库 (缩写: /t:library)/target:module生成能添加到其他程序集的模块 (缩写: /t:module)/define:<符号列表>定义条件编译符号 (缩写: /d)/doc:<文件>要生成的 XML 文档文件- 输入文件 -/recurse:<通配符>根据通配符规范,包括当前目录和子目录下的所有文件/reference:<文件列表>从指定的程序集文件引用元数据 (缩写: /r)/addmodule:<文件列表>将指定的模块链接到此程序集中- 资源 -/win32res:<文件>指定 Win32 资源文件 (.res)/win32icon:<文件>使用该图标输出/resource:<资源信息>嵌入指定的资源 (缩写: /res)/linkresource:<资源信息>将指定的资源链接到此程序集中 (缩写: /linkres)- 代码生成 -/debug[+|-]发出调试信息/debug:{full|pdbonly}指定调试类型(“full”是默认类型,可以将调试程序附加到正在运行的程序)/optimize[+|-]启用优化 (缩写: /o)/incremental[+|-]启用增量编译 (缩写: /incr)- 错误和警告 -/warnaserror[+|-]将警告视为错误/warn:<n>设置警告等级 (0-4) (缩写: /w)/nowarn:<警告列表>禁用特定的警告消息- 语言 -/checked[+|-]生成溢出检查/unsafe[+|-]允许“不安全”代码- 杂项 -@<文件>读取响应文件以获得更多选项/help显示此用法信息 (缩写: /?)/nologo取消编译器版权信息/noconfig不要自动包含 CSC.RSP 文件- 高级 -/baseaddress:<地址>要生成的库的基址/bugreport:<文件>创建一个“错误报告”文件/codepage:<n>指定打开源文件时要使用的代码页/utf8outputUTF-8 编码的输出编译器消息/main:<类型>指定包含入口点的类型(忽略所有其他可能的入口点) (缩写: /m) /fullpaths编译器生成完全限定路径/filealign:<n>指定用于输出文件节的对齐方式/nostdlib[+|-]不引用标准库 (mscorlib.dll)/lib:<文件列表>指定要在其中搜索引用的附加目录。