您的位置:首页 > 理论基础 > 计算机网络

有什么工具能提供预编译后的源代码啊?http://expert.csdn.net/Handler.ashx?id=1943733

2008-02-29 14:01 501 查看
我的意思是:我有一个很大的程序,九百多个文件,里面无数的预编译开关。我想找一个工具,只要我设定好我的基本开关后,就不再看到无关的代码行了;

郁闷中,让这东西搞得头都大了:(

只要有用,分不够只管说:) 问题点数:50、回复次数:34Top

1 楼stukov2002(卡拉是头猪)回复于 2003-06-22 14:30:58 得分 0

VC的编译器CL.EXE的/P选项就是产生与处理结果的,看看msdn~~

Compiler Reference
CL.EXE is a 32-bit tool that controls the Microsoft C and C++ compilers and linker. The compilers produce Common Object File Format (COFF) object (.OBJ) files. The linker produces executable (.EXE) files or dynamic-link libraries (DLLs).

For information on specifying options, see Set Compiler Options. Other topics covered in this section are Fast Compilation and CL Invokes the Linker.

To compile without linking, use /c on the command line or click the Compile command on the Build menu.

The following is a comprehensive, alphabetic list of options for the compiler (CL.EXE). Click any option name for specific information about it. Also see the compiler options listed by category of purpose.

Option name and arguments Purpose
/C Preserves comments during preprocessing
/c Compiles without linking
/Dname[= | # [{string | number}] ] Defines constants and macros
/E Copies preprocessor output to standard output
/EH{s|a}[c][-] Specifies the model of exception handling
/EP Copies preprocessor output to standard output
/F number Sets stack size
/FA[c|s] Creates a listing file
/Fa Sets listing file name
/Fdfilename Renames program database file
/FD Generate file dependencies
/Fefilename Renames the executable file
/FIfilename Preprocesses the specified include file
/Fm[filename] Creates a map file
/Fofilename Creates an object file
/Fpfilename Specifies a precompiled header file name
/FR[filename]
/Fr[filename] Generate browser files
/G3 Optimizes code to favor the 386 processor. Phased out in Visual C++ 5.0, the compiler will ignore this option
/G4 Optimizes code to favor the 486 processor. Phased out in Visual C++ 5.0, the compiler will ignore this option
/G5 Optimizes code to favor the Pentium processor
/G6 Optimizes code to favor the Pentium Pro processor
/GA Optimizes code for Windows application
/GB Optimizes code to favor the Pentium processor. Blends optimizations for the 80386 (/G3), 80486 (/G4), Pentium (/G5), and Pentium Pro (/G6) options.
/GD Optimizes code for Windows DLL
/Gd Uses the __cdecl calling convention
/Ge Activates stack probes
/GF
/Gf Enable string pooling
/Gh Calls hook function, __penter
/Gi Enables incremental compilation
/Gm Enables minimal rebuild
/GR Enables run-time type information (RTTI)
/Gr Uses the __fastcall calling convention
/Gssize Controls stack probes
/GT Supports fiber safety for data allocated using static thread-local storage.
/GX[–] Enables synchronous exception handling
/Gy Enables function-level linking
/GZ Catch release-build errors in debug build
/Gz Uses the __stdcall calling convention
/Hnumber Restricts the length of external (public) names
/HELP Lists the compiler options
/Idirectory Searches a directory for include files
/J Changes the default char type
/LD Creates a dynamic-link library
/LDd Creates a debug dynamic-link library
/link option Passes the specified option to LINK
/MD Creates a multithreaded DLL, using MSVCRT.LIB
/MDd Creates a debug multithreaded DLL, using MSVCRTD.LIB
/ML Creates a single-threaded executable file, using LIBC.LIB
/MLd Creates a debug single-threaded executable file, using LIBCD.LIB
/MT Creates a multithreaded executable file, using LIBCMT.LIB
/MTd Creates a debug multithreaded executable file, using LIBCMTD.LIB
/nologo Suppresses display of sign-on banner
/O1 Creates small code
/O2 Creates fast code
/Oa Assumes no aliasing
/Ob Controls inline expansion
/Od Disables optimization
/Og Uses global optimizations
/Oi Generates intrinsic functions
/Op Improves floating-point consistency
/Os Favors small code
/Ot Favors fast code
/Ow Assumes aliasing across function calls
/Ox Uses maximum optimization (/Ob1gity /Gs)
/Oy Omits frame pointer
/Qlf Generates additional debugging information for kernal-mode device drivers.
/QI0f Performs Pentium 0x0f erratum fix
/QIfdiv[–] Performs Pentium FDIV erratum fix
/P Writes preprocessor output to a file
/Tcfilename
/TC Specifies a C source file
/Tpfilename
/TP Specifies a C++ source file
/Usymbol Removes a predefined macro
/u Removes all predefined macros
/V Sets the version string
/vd{0|1} Suppresses or enables hidden vtordisp class members
/vmb Uses best base for pointers to members
/vmg Uses full generality for pointers to members
/vmm Declares multiple inheritance
/vms Declares single inheritance
/vmv Declares virtual inheritance
/Wlevel Sets warning level
/w Disables all warnings
/X Ignores the standard include directory
/Yc[filename] Creates a precompiled header file
/Yd Places complete debugging information in all object files
/Yu[filename] Uses a precompiled header file during build
/YX Automates precompiled header
/Z7 Generates C 7.0–compatible debugging information
/Za Disables language extensions
/Zd Generates line numbers
/Ze Enables language extensions
/Zg Generates function prototypes
/Zi Generates complete debugging information
/ZI Includes debug information in a program database compatible with Edit and Continue.
/Zl Removes default library name from .OBJ file
/Zmnumber Sets the compiler's memory allocation limit
/Zn Turns off SBRPACK for .SBR files
/Zpn Packs structure members
/Zs Checks syntax only

Top

2 楼feibob(灵猫)回复于 2003-06-22 14:39:03 得分 0

老大,我落后,不能用VC啊,我得用在仿真器上,所以只能是dos界面的东东:(Top

3 楼hdqqq(小西瓜)回复于 2003-06-22 14:48:57 得分 1

如果是标准的c代码,vc的编译器应该也可以。Top

4 楼peanutz()回复于 2003-06-22 15:19:53 得分 4

gcc,编译时加 -E 开关就行,看得到头文件宏展开等之后的情况,而不真正进行编译Top

5 楼feibob(灵猫)回复于 2003-06-22 16:04:58 得分 0

peanutz() 东西在哪?
我现在用的是一个内嵌式的工具,它把编译定义放在一个文件里,等makefile文件来找:(Top

6 楼maojincxj(scottpeck)回复于 2003-06-22 16:42:44 得分 2

没必要吧,还不如用sourceInsight,sourceNavigator等源码工具
看起来很方便Top

7 楼lbaby(春天来了...)回复于 2003-06-22 17:29:27 得分 5

如果你有turbo c2.0的话,可以利用tc中的cpp.exe来实现
cpp会生成一个默认后缀为.i的文件:
比如:
我们有一个hl.c内容如下:
#include <stdio.h>

#define __open_hl__ 0

#ifdef __open_hl__
#define HL "hello world"
#endif
int main(void)
{
printf(HL);
return __open_hl__;
}
在命令行里我们这样调用cpp:
cpp hl.c
然后,cpp就生成了一个后缀为i的hl.i文件,内容如下:
hl.c 1:
hl.c 2:
hl.c 3:
hl.c 4:
hl.c 5:
hl.c 6:
hl.c 7:
hl.c 8: int main(void)
hl.c 9: {
hl.c 10: printf("hello world" );
hl.c 11: return 0 ;
hl.c 12: }
hl.c 13:
我们可以看到,宏已经被替换完毕

这是cpp.exe 的最基本的用法,如果要看更多的说明
可以用
cpp > hlp.txt
来生成hlp.txt文本,然后查看
Top

8 楼peanutz()回复于 2003-06-22 17:52:31 得分 0

不太明白楼主的意思啊。。。:pTop

9 楼flyfreely(林雨亭)回复于 2003-06-22 19:06:45 得分 0

楼主的意思是想要一个编辑器,编辑器能根据 宏的定义 不同,显示和隐藏代码。
比如
#if 0
... // 这部分代码在编辑器重不显示。
#endif

这个功能没见过有哪个编辑器达到。因为这和编译器的参数有关系,不是静态可以支持的。
不过 有些编辑器支持 代码的折叠,比如 vs.net, anjuta,这个勉强代替。Top

10 楼feibob(灵猫)回复于 2003-06-23 11:25:59 得分 0

flyfreely(林雨亭) 说的就是我的意思:)

大家帮帮忙啊,兄弟我痛苦着呢,这个程序每个人加的开关都不同,文档又一点没有:(

我不可能每个开关都查一次全文啊:(Top

11 楼maxcai(cailin)回复于 2003-06-23 12:00:01 得分 0

upTop

12 楼peanutz()回复于 2003-06-23 13:21:54 得分 0

“内嵌式的工具,它把编译定义放在一个文件里”???Top

13 楼williamx(WILL)回复于 2003-06-23 13:51:15 得分 2

vc的话,属性里有预编译,生成文件为 XX.iTop

14 楼DaNiao(鸿雁)回复于 2003-06-23 14:10:24 得分 5

所有的C或者C++编译器都有开关用来输出.i文件(就是预处理过的源文件)的
在VC里找到项目->设置->C++(编译器设置)->输出 然后选输出.i就可以了
gcc和cpp本来就是分开的,你直接用cpp做预处理就好了Top

15 楼DaNiao(鸿雁)回复于 2003-06-23 14:13:08 得分 2

我不知道楼主具体用的是哪个编译器,但大部分的编译器都是上面提到的两种情况:
加编译参数或者是cpp和编译器本身就是独立的

另外,楼主有没有考虑过用VC做预处理之后,再拿到那个什么什么编译器上去编译?Top

16 楼DaNiao(鸿雁)回复于 2003-06-23 14:15:52 得分 4

我终于明白楼主的意思了,基本上所有的编译器都支持从命令行或者象VC那样从IDE给出
预定义的宏,你先把你要定义的宏设置好,然后再生成.i就好了Top

17 楼bigtea(企鹅)回复于 2003-06-23 14:42:18 得分 0

markTop

18 楼feibob(灵猫)回复于 2003-06-23 18:12:52 得分 0

兄弟们,这个贴子一定加分补给大家!:)

继续继续,我现在用了一下,找了个CPP,但没有生成.i文件,倒是飞快地跑了一遍啊,这破文件放到哪了?

我们做的东西是跟硬件关系很大的,我也是才上手做这行,为了省钱,用的好象是个LUNIX下的编译器改到了DOS里进行仿真的,我也还没有搞明白呢。

大家帮帮忙啦:)

Top

19 楼oyd() oyd() oyd() oyd() oyd()回复于 2003-06-23 20:21:38 得分 0

to : DaNiao(鸿雁)
我用的是英文版的vc,没找到你说的地方Top

20 楼feibob(灵猫)回复于 2003-06-24 20:31:21 得分 0

大家说话啊,我每天都看着呢,一定结贴的:)Top

21 楼icecools(浮生若梦)回复于 2003-06-24 20:34:00 得分 1

cpp啦Top

22 楼stukov2002(卡拉是头猪)回复于 2003-06-24 20:45:09 得分 5

命令行下使用TC的CPP工具:
cpp -oOutput.txt hello.c
结果输出到Output.txt文件了~

Top

23 楼peanutz()回复于 2003-06-25 13:16:59 得分 5

你的意思是你用的是CYGWIN?GNU工具系列在WIN32下的一个移植,这不就更方便了嘛,你用类似gcc -E myfile.c >> myoutputfile 试试Top

24 楼callzjy((草魚))回复于 2003-06-25 14:40:01 得分 0

lookTop

25 楼feibob(灵猫)回复于 2003-06-25 18:25:19 得分 0

试过了,文件倒是生成了一个,不过打开只得到两行,什么也没有。空空的

:(

兄弟们加油啊:)
搞明白了再加二百分如何?:)Top

26 楼peanutz()回复于 2003-06-26 13:08:52 得分 0

只有两行?你怎么用的?把你敲的命令贴上来看看Top

27 楼feibob(灵猫)回复于 2003-06-27 12:46:52 得分 0

gcc -E 输入文件 输出文件
上面的格式对不对?Top

28 楼arfi()回复于 2003-06-27 13:29:06 得分 0

gcc -E 编译文件 > 输出文件

需要一个>就可以了,是重定向用的。Top

29 楼peanutz()回复于 2003-06-27 13:35:40 得分 4

应该是“gcc -E 输入文件 >> 输出文件”,>>是重定向呀!Top

30 楼peanutz()回复于 2003-06-27 13:37:10 得分 0

哦忘了,>也可以,一个是追加,一个是重新些,不过对你没多大影响的Top

31 楼peanutz()回复于 2003-06-27 13:39:53 得分 0

我得回复是对feibob(灵猫)的哈,不是说arfi() 说得不对:p,发贴那阵刚好没看到arfi() 的恢复Top

32 楼feibob(灵猫)回复于 2003-06-28 15:42:30 得分 0

如果我是在一个文件夹下的很多文件里有东西,这应该编译哪一个?

用上面说的办法,文件倒是有了一个,九十多K,但打开就只有两行,为什么?Top

33 楼peanutz()回复于 2003-06-28 15:54:45 得分 10

拜托,你是不是没拉垂直滚动条啊,展开之后有很多空白行的。。。Top

34 楼feibob(灵猫)回复于 2003-06-29 10:31:53 得分 0

我倒:(

前面这位兄弟真聪明啊,连我没有拉滚动条都知道:)

狂喜中。结,贴!

各位兄弟,我会另开两个贴子给分,大家进来拿分啊:)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐