编译好的文件怎么qt creator配置编译器

4113人阅读
程序应用(54)
3.15 配置外部工具程序和参数
[: 这篇文章原是 GCC 手册中的一节, 3.15 是它在手册中的编号.]
gcc&是一个驱动式的程序. 它调用其它程序来依次进行编译, 汇编和链接. GCC 分析命令行参数, 然后决定该调用哪一个子程序, 哪些参数应该传递给子程序. 所有这些行为都是由 SPEC 字符串(spec strings)来控制的. 通常情况下, 每一个 GCC 可以调用的子程序都对应着一个 SPEC 字符串, 不过有少数的子程序需要多个 SPEC 字符串来控制他们的行为. 编译到 GCC 中的 SPEC 字符串可以被覆盖, 方法是使用&-specs=&命令行参数来指定一个
SPEC 文件(spec file).
Spec 文件(Spec files) 就是用来配置 SPEC 字符串的. 它包含了一系列用空行分隔的指令. 指令的类型由一行的第一个非空格字符决定, 它们可能是:
%command定义 SPEC 文件的预处理命令, 预处理命令包括以下的命令:
%include &file&搜索文件, 并将其内容插入到 SPEC 文件的当前位置.
%include_noerr &file&和&'%include' 一样, 但是在没有找到文件的情况下不会产生错误消息.
%renameold_name&new_name将 SPEC 字符串&old_name&改名为&new_name.
*[spec_name]:这条命令让编译器创建,覆盖或删除指定名字的 SEPC 字符串. 所有在这条指令之后到下一条指令或空行之前的文本都被认为是这个 SPEC 字符串的内容. 如果它的内容为空, 则这个名字将被删除(如果该名字不存在, 则什么都不会发生). 内容不为空时, 如果该名字不存在, 则会创建一个新的 SPEC 字符串, 如果已经存在了, 他们的内容将会被替换. 如果内容的第一个字符为 '+', 则这些内容会被追加到原来定义的内容后面, 而不是覆盖了.
[suffix]:创建一个新的 '[suffix] spec'(后缀处理) 组合. 这个指令之后到下一个指令或空行之前的行组成了这个后缀的 SPEC 字符串. 当编译器遇到指这种后缀的输入文件时, 它会依次执行 SPEC 字符串中的指令, 这些指令指明了如何编译那个文件. 例如:
z-compile -input %i
它的意思是: 任何以 '.ZZ' 结尾的输入文件都将使用 'z-compile' 程序进行处理, 调用的时候将会使用&-input&开关以及 '%i' 替换后的结果(详见下文) 作为命令行参数.
作为 SPEC 字符串的内容, suffix 指令后的文本还可以是下面的某一个:
@language它表明这个后缀是某种已知语言的别名. 它和 GCC 命令行中用于指定语言的&-x&选项类似. 比如:
@c++
这说明 .ZZ 文件实际上是 C++ 的源代码文件.
#name这会产生一条错误消息:
当前系统没有安装 name 编译器.
GCC 已经内建了一份巨大的后缀列表. 这条指令将后缀添加到列表的结尾处, 由于这个列表使用的时候是从结尾向后搜索的, 实际上可以使用这种技术来覆盖之前的条目.
GCC 已经内置了如下的 SPEC 字符串. SPEC 文件可以覆盖他们或者创建新的. 注意, 某些 GCC 的实现也可能添加它们自己的 SEPC 字符串到这个列表里面.
传递给汇编器的选项
传递给汇编后处理器的选项
传递给 C 预处理器的选项
传递给 C 编译器的选项
传递给 C++ 编译器的选项
链接的最后需要包含的目标文件
传递给链接器的选项
命令行传递给链接器的要包含的库
决定给链接器传递哪个 GCC 支持库
设置链接器的名字
predefines
传递给 C 预处理器的宏定义
signed_char
传递给 CPP 的用于说明 char 默认是否是有符号类型的宏
一开始就需要传递给链接器的目标文件
下面是一个简单的 SPEC 文件的例子:
%rename lib
--start-group -lgcc -lc -leval1 --end-group %(old_lib)
这个例子把 'lib' 改名为 'old_lib' 然后用一个新的定义覆盖了之前的 'lib' 定义. 新定义在包含旧的定义文本之前添加了一些额外的命令行选项.
SEPC 字符串是传递给相应程序的命令行选项的列表. 另外, SEPC 字符串可以包含 '%' 作为前缀的字符串来表示变量. 变量可以用来代替一串文本, 或者作为向命令行插入文本的条件. 使用这些概念可以产生非常复杂的命令行.
下面是所有的用于 SPEC 字符串的预定义变量. 注意,这些变量在表示文本时不会自动在结果两边产生空格. 你可以在链接这些变量时使用常量字符串来一起链接.
%%在程序名字或参数中用于表示一个 '%'.
%i用来表示当前正在处理的输入文件名
%b表示输入文件的基本名字. 它不包含最后一个点号以及之后的内容, 也不包含路径名.
%B和 '%b' 相同, 但是它包含了后缀名(最后一个点号后的内容).
%d用包含或附加 '%d' 来标记一个临时文件名, GCC 正常退出后会自动删除带有这种标记的文件. 和 '%g' 不同, 这个变量不会在参数中产生文本内容.
%gsuffix产生指定后缀&suffix&的文件名, 每次编译产生一个. 和 '%d' 一样, 它也会被标记为临时文件. 为了减少拒绝服务攻击的可能性, 即使上一次产生的文件名已经知道了, 下一次产生的文件名也是无法预料的. 例如, '%g.s ... %g.o ... %g.s' 可能被转换成 'ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. 后缀名需要可以和 '[.A-Za-z]*'
这样的正则表达式匹配或者使用特定的 '%O'. '%O' 使用的时候假设它已经被处理过了. 以前, '%g' 只是简单的每次出现都被替换成一个文件名, 没有后缀的情况下使得攻击很容易成功.
%usuffix和 '%g' 一样, 但是每次出现就会产生一个新的临时文件名, 而不是每次编译的时候一个.
%Usuffix生成上一次使用 '%usuffix' 时产生的文件名, 如果之前没有过, 就生成一个新的. 在没有使用过 '%usuffix' 的情况下, 它和 '%gsuffix' 一样, 只是他们不会共享后缀名字空间. 因此, '%g.s ... %U.s ... %g.s ... %U.s' 会生成两个不同的文件名, 一个是 '%g.s'
产生的, 另一个是 '%U.s'. 以前, '%U' 只是替换成上一个的 '%u' 产生的文件名, 不会带任何的后缀.
%jsuffix如果存在 HOST_BIT_BUCKET, 并且它可写, 也没有使用&-save-temps, 这会被替换成 HOST_BIT_BUCKET 的名字. 否则, 产生一个临时文件名, 和 '%u' 效果相同. 这个临时文件并不用来在两个进程间通信, 只是作为垃圾进行处理.
[: HOST_BIT_BUCKET 是 GCC 中配置宿主系统环境时用到一个参数. 它是由宿主系统定义的一个路径名, 可以被当作一个文件来进行写入, 但是所有写入的内容都会被丢弃. 这通常被称为&bit bucket(比特流垃圾桶) 或&null device(空设备),
在 UNIX 中它通常就是 /dev/null.
%|suffix%msuffix和 '%g' 类似, 只是可以使用&-pipe&(管道). 使用管道时, '%|' 被替换成一个破折号, '%m' 被替换成空. 这是让程序从标准输入读取数据和往标准输出写数据的常用方式. 如果你需要处理更复杂的情况, 你还可以使用 '%{pipe:X}': 参考&f/lang-specs.h&中的例子.
%.SUFFIX对于匹配后缀的参数进行替换. 后缀到空格或下一个 % 结束.
%w对包含或跟随有 '%w' 的参数标记为此次编译的输出文件. 这会将这个参数放到 '%o' 的参数序列里面.
%o替换所有输出文件的名字, 并自动在他们周围放置空格. 你仍然应该在 '%o' 的周围书写空格, 否则结果将是未定义的. '%o' 用于运行链接器. 没有可识别后缀的输入文件将不会被编译, 但是他们被包含在输出文件里, 因此, 他们可以被链接.&
%O为目标文件替换后缀. 注意, 当它紧接在 '%g, %u, 和 %U' 后面时会被特别处理, 因为它们需要完整的文件名. 处理的方法是假设 '%O' 已经被处理过了, 除非 '%g, %u, 和 %U' 当前不支持使用特殊的 '%O' 后缀, 例如, '.o'.
%p替换标准的预定义宏为当前的目标类型. 运行 cpp 程序时使用.
%P和 '%p' 类似, 只是会在每个预定义宏的名字前后加上 '__', 除非宏的名字是以 '__' 或 '_L' 开头的. 其中&L&是一个大写字母. 这是 ISO C 所要求的.
%I贴换所有的&-iprefix(来自 GCC_EXEC_PREFIX),&-isysroot(来自 TARGET_SYSTEM_ROOT),&-isystem(来自 COMPILER_PATH 和 -B 选项) 以及所需的&-imultilib.
%s当前参数是某个库或可执行文件的名字. 搜索标准的目录列表来查找这个文件名, 如果找到了, 就用全名来进行替换. 当前目录被包含在扫描的目录列表的第一位.
%T当前参数是一个连接脚本. 在库文件的目录列表里面搜索那个文件. 如果文件找到了, 插入一个&--script选项和文件的全路径名到命令行中. 如果文件没找到将会产生一条错误信息. 注意, 当前目录不会被搜索.
%estr把&str&作为错误消息打印出来.&str&使用换行作为结束. 检测到不一致的选项时可以使用它.
%(name)贴换名字为&name&的 SPEC 字符串内容到当前位置.
%x{option}为 '%X' 添加一个选项.
%X输出用 -W1 或 '%x' 添加的所有链接器选项.
%Y输出用 -Wa 添加的所有汇编器选项.
%Z输出用 -Wp 添加的所有汇编器选项.
%a处理 asm spec. 用于计算传递给汇编器的开关.
%A处理 asm_final spec. 如果需要汇编后处理器的话, 用于计算传递给汇编后处理器的选项.
%l处理 link spec. 用于计算传递给链接器的命令行参数. 它一般是使用的 `%L %G %S %D 和 %E' 序列.
%D为所有 GCC 认为可能包含可执行文件的目录导出一个 -L 选项. 如果目标支持多库, 那么每个目录都会考虑多库目录.
%L处理 lib spec. 这个 SPEC 字符串决定了连接器的命令行需要包含的库文件.
%G处理 libgcc spec. 这个 SEPC 字符串决定了传递给连接器命令行参数中使用的 GCC 支持库.
%S处理 startfile spec. 这个 SEPC 字符串表示传递给链接器的第一个目标文件. 通常这个文件名是 crt0.o.
%E处理 endfile spec. 表示传递给链接器的最后一个目标文件.
%C处理 cpp spec. 用于构造传递给 C 预处理器的参数.
%1处理 cc1 spec. 用于构造传递给当前的 C 编译器('cc1') 的选项.
%2处理 cc1plus spec. 用于构造传递给当前的 C++ 编译器('cc1plus') 的选项.
%*替换匹配选项的可变部分. 详见下文. 注意, 替换字符串中的逗号会被空格取代.
%&S删除命令行中所有的 -S 选项. 注意这个命令是位置相关的. 在 SPEC 字符串中这个命令之前的 -S 会被删除, 之后的不会.
%:function(args)调用指定名字的函数, 并传递参数. 参数首先被当作嵌套的 SPEC 字符串处理, 然后分割成一个参数数组. 函数返回一个字符串, 插入到当前命令所在的位置.
下面是内建支持的 SPEC 函数:
getenvgetenv spec 函数带两个参数: 一个环境变量名称和一个字符串. 如果环境变量没有定义, 则会产生一个严重错误. 返回值是环境变量的值和字符串连接在一起的. 例如, 如果 TOPDIR 被定义为 /path/to/top, 那么:
%:getenv(TOPDIR /include)
将会展开成 /path/to/top/include.
if-existsif-exists 函数带一个参数, 一个文件的绝对路径名. 如果文件存在, if-exists 返回路径名. 下面是一个用法的简单例子:
*startfile:
crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
if-exists-elseif-exists-else 函数和 if-exists 函数类似, 不同的是它带有两个参数. 第一个参数是文件的路径名. 如果文件存在, if-exists-else 函数返回路径名. 如果不存在, 返回第二个参数. 这样, if-exists-else 函数可以根据文件是否存在来选择这个文件或其它 . 下面是一个使用的例子:
*startfile:
crt0%O%s %:if-exists(crti%O%s) \
%:if-exists-else(crtbeginT%O%s crtbegin%O%s)
replace-outfilereplace-outfile 函数带有两个参数. 它在输出文件数组中查找第一个参数, 并用第二个参数来替换.下面是示例:
%{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
remove-outfileremove-outfile 函数带一个参数. 它在输出文件数组中查找这个参数并将其删除. 示例:
%:remove-outfile(-lm)
pass-through-libspass-through-libs 可以带任意数量的参数. 它查找 -l 选项和以 .a 结尾的非选项内容(确保是输入链接器的库文件), 将找到的所有参数加上 -plugin-opt=-pass-through= 前缀, 并添加空格分隔后返回. 这个列表用于传递给 LTO 链接器插件.
%:pass-through-libs(%G %L %G)
print-asm-headerprint-asm-header 函数不带参数, 它只是简单的打印如下的标语:
Assembler options
=================
Use &-Wa,OPTION& to pass &OPTION& to the assembler.
它用于在使用 --target-help 的输出中分隔编译器选项和汇编器选项.
%{S}如果给 GCC 传递了 -S&选项, 替换这个选项. 如果么有, 它什么也不做. 注意这个选项的前导破折号, 替换的时候会被自动加上. 因此, SPEC 字符串 '%{foo}' 匹配命令行中的 -foo 选项, 并且输出一个 -foo.
%W{S}和 %{S} 类似, 只是会标记最后提供的那个参数为文件, 并且在失败的时候删除这个文件.
%{S*}贴换传递给 GCC 的所有以 -S&开头的选项, 通常它们都还带有一个参数. 这主要用于对 -o, -D, -I 等选项使用. GCC 认为&-o foo&是一个选项, 它的名字以 'o' 开头.&'%{o*}'&替换这个, 包括空格. 因此, 将会产生两个参数.
%{S*&T*}和 %{S*} 类似, 只是保持&S&和&T&选项的顺序(在 SEPC 中&S&和&T&的顺序并不重要). 可以使用任意数量的 & 分隔的变量, 其中的每个字段都是可选的. 对 CPP 比较有用的例子如: '%{D*&U*&A*}'.&
%{S:X}如果 GCC 中使用了 -S&选项, 用&X&来代替.
%{!S:X}如果没有在 GCC 中使用 -S&选项, 替换成&X.
%{S*:X}如果有一个或多个以 -S&开头的选项, 则替换成&X. 通常, 不管选项出现了多少次, 都只替换成一个&X. 但是, 如果&X&中包含了 '%*', 那么每一个选项都会替换成一个&X, 其中的 '%*' 被选项中匹配 '*' 的部分替代.
%{.S:X}如果处理的文件以&S&开头, 则替换成&X
%{!.S:X}如果没有处理以&S&开头的文件, 则替换成&X
%{,S:X}如果处理的文件是&S&语言的, 则替换成&X
%{!,S:X}如果没有处理&S&语言的文件, 则替换成&X
%{S|P:X}如果提供了 -S&或 -P&选项, 则替换成&X. 它也可以和 '!', '.', ',' 以及 * 进行组合, 虽然他们比 '|' 有更强的约束. 如果&X&中出现了 '%*', 所有的替换项都需要使用 '*', 并且只有第一个匹配的替换项被使用.
例如, 像下面这样的 SEPC 字符串:
%{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
则输入的命令行和对应的输出如下:
-bar -boggle
-foo -baz -boggle
-bar -baz -boggle
%{S:X; T:Y; :D}如果 GCC 包含了 -S&选项, 替换成&X, 否则, 如果包含了 -T, 替换成&Y, 否则, 替换成&D. 你可以添加任意数量的子句. 它还可以和 '.', ',', '!', '|' 以及 '*' 进行组合.
在条件语句 %{S:X} 以及类似的结构中的&X&可以包含嵌套的 '%' 结构, 空格, 甚至是换行. 向以上描述的那样, 它们照常工作. 在&X&结尾处的空格会被忽略. 空格也可以出现在冒号的左边, 但不能出现在 '.' 或 '*' 与匹配单词之间.
在这些结构中,&-O,&-f,&-m, 以及&-W&选项会被特殊处理. 如果有其他的 -O 选项或者有与 -f, -m, -W 起作用相反的选项, 之前的值将会被忽略, 除非 {S*} 中的&S&只有一个字母. 只有一个字母时所有的匹配项都可以通过.
'|' 字符出现在谓词的开头表示接下来的命令应该使用管道, 不过只有使用了 -pipe 时才能生效.
哪些选项需要使用参数是内置到 GCC 里面的. (你或许在想, 通过使用不同的编译器 sepc 来定义哪些选项需要参数是很有用的. 但是, 这在目前是无法实现的. 如果不知道哪些选项需要参数的话, GCC 无法决定哪个是需要编译的输入文件. GCC 必须要知道输入文件才能决定使用哪个编译器).
GCC 也知道, 以 -l 开头的参数会被作为编译输出文件处理, 并按照它在其他输出文件中的位置传递给链接器.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1377611次
积分:16494
积分:16494
排名:第473名
原创:223篇
转载:156篇
评论:409条
(1)(4)(4)(1)(1)(1)(2)(5)(1)(3)(1)(2)(14)(1)(5)(10)(5)(11)(6)(7)(2)(11)(5)(1)(2)(4)(1)(15)(11)(11)(3)(4)(19)(7)(3)(11)(4)(3)(1)(2)(4)(3)(3)(2)(1)(1)(4)(2)(2)(1)(3)(2)(4)(2)(5)(5)(3)(5)(12)(15)(7)(2)(1)(5)(1)(1)(3)(2)(3)(2)(5)(4)(5)(5)(3)(11)(1)(8)(2)(7)(1)(1)(5)(3)(1)(1)(1)(1)(1)(1)(1)(1)(1)请问正式编译内核前生成的配置文件.config在哪??_ubuntu吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:103,182贴子:
请问正式编译内核前生成的配置文件.config在哪??收藏
执行make menuconfig后能看到如下信息configuration written to .config现在我想知道这个.config放在那里了。。。。
CGWANG原画培训 「零基础全额退费保障」,原画名企委托培训,高薪工作不是梦
/usr/src/linux或者你自行解压源码的位置。真的找不到,那就...find / -type f -name ".config"
当前目录,用ls -a
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或前言 & &Linux内核是操作系统的核心,也是操作系统最基本的部分。
&Linux内核的体积结构是单内核的、但是他充分采用了微内核的设计思想、使得虽然是单内核、但工作在模块化的方式下、并且这个模块可以动态装载或卸
载;Linux负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。如是我们在了解Linux内核的基础上根据自己的需
要、量身定制一个更高效,更稳定的内核,就需要我们手动去编译和配置内核里的各项相关的参数和信息了。注意、如果两个内核模块的版本不完全相同是不可以跨版本使用的。正文 & &首先我们要去获得Linux内核的压缩文件、获得的路径很多了、最直接的就是去内核官网获得了(http://www.kernel.org),也可以到各镜像站上去下载、这里就不再说明了。注意:/usr/src;一般而言、我们制做linux内核的时候源码一般放在这个路径下、并且有一个链接叫linux什么的、所以展开时应该放在这个路径下。 & &我这里下载有一个3.13.2版本的内核、展开时指定一个展开路径就可以了,文件比较大、70多M、可能需要点时间的。 & &# tar xf linux-3.13.2.tar.xz -C /usr/src/
& & & &展开之后在/usr/src/这个目录下就看到了生成一个linux-3.13.2的文件了 & &为以后使用方便、我们给他创建一个链接: & &# ln -sv linux-3.13.2 linux
& & & &我们cd到linux目录里面看一下里面的文件看: & &# cd /usr/src/linux
& & & &里面的目录我这里就不一一介绍了、有兴趣的朋友可以去了解一下哦。 & &到下一步就是去配置内核了、这步配置内核的方法有多种、每一个make就是一种方法、我们只在选一种就可以了:
make config:遍历选择所要编译的内核特性
make allyesconfig:配置所有可编译的内核特性
make allnoconfig:并不是所有的都不编译,而是能选的都回答为NO、只有必须的都选择为yes。
make menuconfig:这种就是打开一个文件窗口选择菜单,这个命令需要打开的窗口大于80字符的宽度,打开后就可以在里面选择要编译的项了
下面两个是可以用鼠标点选择的、比较方便哦:
make kconfig(KDE桌面环境下,并且安装了qt开发环境)
make gconfig(Gnome桌面环境,并且安装gtk开发环境)
menuconfig:使用这个命令的话、如果是新安装的系统就要安装gcc和ncurses-devel这两个包才可以打开、然后再里面选择就可以了、通这个方法也是用得比较多的:
& &如果想方便点又不想用别的方法那就复制当前系统上的/boot/config-版本-平台,这个文件到/usr/src/linux/.config覆 盖这个文件,再改一下里面的配置信息;哪些用得着就保留、哪些用不着就删除了都可以、有什么新的也可以加进来、这就是按自己的需求来配置了;
& &注意:如果编译是在远程连接上的话、make会出问题的、如果远程连接断开的话那运行的进程是不是也都断开了、这个make的进程一定是当前系统上运行的子进程、有些一旦父进程挂了、子进程也将不复存在、俗话说:皮之不存毛将焉附,是这个道理吧;
& &所以我们使用一个叫screen这个命令来操作,没安装自己安装上就是了、可以在一个窗口上启动n个虚拟的桌面,即使退出了也会保留之前的内容,切换进screen就可以看到窗口标题栏上的screen标志了:
& &# screen -ls:可以查看当前启用了多少个screen & &按Ctrl+a,松开再按d可以隐藏screen桌面 & &因为编译内核需要比较长的时间、所以我们在screen上编译、然后再把screen桌面隐藏就可以了; & &重新接入screen: & &# screen -r 跟上screenID就可以了 & &然后我们就开始编译吧;(我这里编译差不多用了两小时、make的时候我不指定cpu的核心数、默认就是用一个核来编译、所以很久)
& &编译好了之后我们就可以进行下一步了: & &# make modules_install & &这步完了之后你可以查看一下/lib/modules/目录下就会生成一个以版本号命名的一个文件模块了 & &
& & modules之后再往下走、敲命令吧 & &# make install & &安装完之后会在/boot/目录下生成一个内核文件vmlinuz-3.13.2、还有几个跟你当前编译的版本一样的文件、可以ls去看一下: & &# ls /boot/
& & & &如果没出什么问题到这里我们应该算是编译好了一个新内核了;可以到grub.conf配置文件时看一下: & &# vim /boot/grub/grub.conf
& &好了、要不我们重启一下看看、OK、重启吧!如果顺利的话就可以进到内核选择界面了,选项我们编译的新内核就OK了,好了、到这就结束了!
& &总结一下我们的安装步骤:
1、获取内核源码,解压至/usr/src
# tar xf linux-3.13.5.tar.xz -C /usr/src
# ln -sv /usr/src/linux-3.13.5
/usr/src/linux
2、配置内核特性(选择一种方法就可以了)
make config:遍历选择所要编译的内核特性
make allyesconfig:配置所有可编译的内核特性
make allnoconfig:并不是所有的都不编译
make menuconfig:这种就是打开一个文件窗口选择菜单
make kconfig(KDE桌面环境下,并且安装了qt开发环境)
make gconfig(Gnome桌面环境,并且安装gtk开发环境)
3、编译内核
# make [-j #] : #号最多为CPU物理核心总数的两倍,这样会快点哦
4、安装内核模块
# make modules_install
5、安装内核
# make install
6、验正并测试
# cat /boot/grub/grub.conf
查看新内核是否已经添加, 而后重启系统并测试
结束: & &其实编译一个新的内核好像也不是很难是吧、跟我们之前源码编译的httpd的步骤差不多、也就是第一步麻烦点、细心点就OK了,当然如果有什么不对的地方还望各路诸侯多多提点!
阅读(...) 评论()&nbsp&#8250&nbsp&nbsp&#8250&nbsp
Eclipse设置编译文件.class输出路径
1.首先我发现我的eclipse中--&project--&build automatically 是勾选上的。好吧,把把前面的勾去掉。2去掉以后我先clean --& Clean projects selected below --&选中项目--&ok3.有了第二步,我想这次肯定大功告成了,可是当我在project--&build All 以后,还是找不到我所需要的*.class这可怎么办呢。
造成这个问题的原因往往是你这个项目是直接导入的,而又没有把所有的项目文件都导入进来,导致编译虽然通过,但是在原来该存放.class文件的目录不是该新项目的输出路径。这时你该这样设置。两种方法:一、为项目设置.class设置输出路径右键项目 & Properties & Java Build Path & Source & Default Output Folder点击&Browse&时可以选择目录或新建目录用于存放.class文件这样就设置完成.java文件编译后生成的.class文件输出路径。设置完成后,src中的.java文件编译后生成的.class文件与package所对应的目录一起存放在classes目录中。&二、设置全局.class文件输出路径Window & Preferences & Java & Build Path & Source and Output Folder如下图:此时再新建项目的时候会自动的将.class文件放置在你所设置的目录中,如下图:
上一篇: 编者语:书上都说string是引用类型,但事实上我所看到的string和所谓的值类型没有什么区别,但通过看以下的文章,明白了: 1、string a=之后,如果a=xy,则是a并没有改变内存中已经存在的abc,而是又创建了另外一个实例。实际上相当于:string a=new Str
下一篇: 在以前的JAVA学习过程当中,不太注意理论知识的学习,所以在阅读thinking in java的时候,就没有太注意其中关于回调函数的介绍。今天,在阅读一段关于网络信使的源代码时,发现了有关回调函数的使用,对他产生了研究的兴趣,不过该源代码中关于回调函数的介

我要回帖

更多关于 maven编译插件 配置 的文章

 

随机推荐