Ⅰ 关于C语言预处理命令
第一句有问题。
比如
#ifndef WIN32
#endif printf("OK\n");
在这里,这个printf就不会被执行。也就是说, 一行中, 只能有一条预处理指令,
当编译的预处理阶段, 编译器识别了一条完整的预处理指令后,后面的所有东西他都不要了。
对于第二句,在函数里,我们是可以使用预处理指令的。
比如
void fun(void)
{
#ifdef WIN32
... // 对于windows系统环境的操作
#else
... // 对于windows以外的系统环境的操作
#endif /* WIN32 */
...
}
楼上的同学, 你是在哪儿本书上看的? 介绍一下呗
Ⅱ Windows7 文件夹搜索如何优先出现关键字
有几种快速搜索方式,1,首先你如果知道这个文件夹在哪个盘,就点这个盘搜索,如C盘、D盘、E盘。2、在搜索处设置该文件夹的创建时间或文件大小,先在搜索栏鼠标点一下,就会有下拉弹窗,进行筛选,设置时间
这样就会快点找到
Ⅲ 影响百度搜索结果排序的因素有哪些优先级怎样
网工备考资料(我都看过的,自己按重要程度高低排序):
郭春柱编着的3本书(书名我就不打了,反正现在就3本,建议你看《网络工程动手实练营》),2009年8月份准备又出一本,可能是为11月份考试准备的。今年的5月份考试在他《网络工程师动手实练营》其中大部分和试题类似(这些事情你应该清楚吧)
网络工程师历年试题分析与解答 清华大学出版社 (必备,这本书最重要,出版日期越新越好)
2004和2009网络工程师考纲(必备,作对比用)
网络工程师冲刺指南(第二版)徐峰编着 电子工业出版社(必备,这本书从2月到5月我都在翻)
网络工程师考试题型精解与全真练习徐峰编着 电子工业出版社(必备,我唯一一本模拟题辅导资料,反复做了好多遍)
计算机网络(第五版) 谢希仁编着 电子工业出版社 (建议,听说没基础的要多看)
《网络工程师教程》 雷震甲主编 清华大学出版社 (必备,网上很多人说把它当词典翻,我像是的,太深奥没有人能够完全看完的)
网络工程师考试考前串讲 希赛的
电子工业出版社 (考前一个星期一定要看,很有收获!)
网络工程师考试试题分类精解 希赛的
电子工业出版社 (考前一个星期也要看!)
网络工程师考前同步辅导 清华大学出版社 (有兴趣就去看下,我买来基本上是放在一边,觉得里面的知识都过时啦)
Red hat linux9 系统管理 朱居正着 清华大学出版社(学习linux时我就看这本书)
下面四本书:你遇到不懂时就去参考下最好能借,买的话太贵了
《CCNA 1 网络基础》
《CCNA 2 路由器与路由基础》
《CCNA 3 交换基础与中级路由》
《CCNA 4 广域网》
补充下,网络工程师有两种的:
一种是教育局的:四级网络工程师;(一般非计算机类考的)
第二种是国家的:网络工程师(俗称软考,网工)当然含金量也会高,社会认可度也高,相对难度也比四级的高。我今年5月份我已经过了。
Ⅳ 相对路径和绝对路径
绝对路径:是从盘符开始的路径,形如
C:\windows\system32\cmd.exe
相对路径:是从当前路径开始的路径,假如当前路径为C:\windows
要描述上述路径,只需输入
system32\cmd.exe
实际上,严格的相对路径写法应为
.\system32\cmd.exe
其中,.表示当前路径,在通道情况下可以省略,只有在特殊的情况下不能省略。
假如当前路径为c:\program files
要调用上述命令,则需要输入
..\windows\system32\cmd.exe
其中,..为父目录。
当前路径如果为c:\program files\common files
则需要输入
..\..\windows\system32\cmd.exe
另外,还有一种不包含盘符的特殊绝对路径,形如
\windows\system32\cmd.exe
无论当前路径是什么,会自动地从当前盘的根目录开始查找指定的程序。
Ⅳ Linux下C语言编译的时候什么样的函数会用到-L或-l指定路径或名
math.h的函数不在libc.a(静态链接)或者libc.so(动态链接)里面,
它在libm.a或者libm.so里面。
比如pow函数,你man 3 pow,它有一句“Link with -lm”的,其他没提示的标准c函数是-lc的,不过通常是不用加-lc的,因为gcc默认会自己帮你添加,这些都搜索路径写在gcc程序的内部。
如果你自己修改然后重新编译一个gcc,可以定义其他搜索路径,当然不推荐这样做。
Ⅵ 怎样强制设置一个程序的优先级别
最佳答案 一、限制用户对文件的访问权限 如果程序所在的磁盘分区文件系统为NTFS格式,管理员账户可以利用NTFS文件系统提供的文件和文件夹安全选项控制用户对程序及文件的访问权限。通常情况下,一个应用程序安装到系统后,本地计算机的所有账户都可以访问并运行该应用程序。如果取消分配给指定用户对该应用程序或文件夹的访问权限,该用户也就失去了运行该应用程序的能力。 例如,要禁止受限用户运行Outlook Express应用程序,可以进行如下的操作: (1)、以administrator账户登录系统,如果当前系统启用了简单文件共享选项,需要将该选项关闭。具体做法是,在Windows浏览器窗口点击“工具”菜单下的“文件夹选项”,点击“查看”选项页,取消“使用简单文件共享”选项的选择,点击“确定”。 (2)、打开Program Files文件夹,选中Outlook Express文件夹并单击右键,选择“属性”。 (3)、点击“安全”选项页,可以看到Users组的用户对该文件夹具有读取和运行的权限,点击“高级”。 (4)、取消“从父项继承那些可以应用到子对象的权限项目,包括那些再次明确定义的项目”选项的选择,在弹出的提示信息对话框,点击“复制”,此时可以看到用户所具有的权限改为不继承的。 (5)、点击“确定”,返回属性窗口,在“用户或组名称”列表中,选择Users项目,点击“删除”,点击“确定”,完成权限的设置。 要取消指定用户对文件或程序的访问限制,需要为文件或文件夹添加指定的用户或组并赋予相应的访问权限。 这种方法允许管理员针对每个用户来限制他访问和运行指定的应用程序的权限。但是这需要一个非常重要的前提,那就是要求应用程序所在的分区格式为NTFS,否则,一切都无从谈起。 对于FAT/FAT32格式的分区,不能应用文件及文件夹的安全选项,我们可以通过设置计算机的策略来禁止运行指定的应用程序。 二、启用“不要运行指定的Windows应用程序”策略 在组策略中有一条名为“不要运行指定的Windows应用程序”策略,通过启用该策略并添加相应的应用程序,就可以限制用户运行这些应用程序。设置方法如下: (1)、在“开始”“运行”处执行gpedit.msc命令,启动组策略编辑器,或者运行mmc命令启动控制台,并将“组策略”管理单元加载到控制台中; (2)、依次展开“‘本地计算机’策略”“用户设置”“管理模板”,点击“系统”,双击右侧窗格中的“不要运行指定的Windows应用程序”策略,选择“已启用”选项,并点击“显示”。 (3)、点击“添加”,输入不运行运行的应用程序名称,如命令提示符cmd.exe,点击“确定”,此时,指定的应用程序名称添加到禁止运行的程序列表中。 (4)、点击“确定”返回组策略编辑器,点击“确定”,完成设置。 当用户试图运行包含在不允许运行程序列表中的应用程序时,系统会提示警告信息。把不允许运行的应用程序复制到其他的目录和分区中,仍然是不能运行的。要恢复指定的受限程序的运行能力,可以将“不要运行指定的Windows应用程序”策略设置为“未配置”或“已禁用”,或者将指定的应用程序从不允许运行列表中删除(这要求删除后列表不会成为空白的)。 这种方式只阻止用户运行从Windows资源管理器中启动的程序,对于由系统过程或其他过程启动的程序并不能禁止其运行。该方式禁止应用程序的运行,其用户对象的作用范围是所有的用户,不仅仅是受限用户,Administrators组中的账户甚至是内建的administrator帐户都将受到限制,因此给管理员带来了一定的不便。当管理员需要执行一个包含在不允许运行列表中的应用程序时,需要先通过组策略编辑器将该应用程序从不运行运行列表中删除,在程序运行完成后,再将该程序添加到不允许运行程序列表中。需要注意的是,不要将组策略编辑器(gpedit.msc)添加到禁止运行程序列表中,否则会造成组策略的自锁,任何用户都将不能启动组策略编辑器,也就不能对设置的策略进行更改。 提示:如果没有禁止运行“命令提示符”程序的话,用户可以通过cmd命令,从“命令提示符”运行被禁止的程序,例如,将记事本程序(notepad.exe)添加不运行列表中,通过XP的桌面运行该程序是被限制的,但是在“命令提示符”下运行notepad命令,可以顺利的启动记事本程序。因此,要彻底的禁止某个程序的运行,首先要将cmd.exe添加到不允许运行列表中。 三、设置软件限制策略 软件限制策略是本地安全策略的一个组成部分,管理员通过设置该策略对文件和程序进行标识,将它们分为可信任和不可信任两种,通过赋予相应的安全级别来实现对程序运行的控制。这个措施对于解决未知代码和不可信任代码的可控制运行问题非常有效。软件设置策略使用两个方面的设置对程序进行限制:安全级别和其他规则。 安全级别分为“不允许的”和“不受限制的”两种。其中,“不允许的”将禁止程序的运行,不论用户的权限如何;“不受限的”允许登录用户使用他所拥有的权限来运行程序。 其它规则,即由管理员通过制定规则对指定的一批或一个文件和程序进行标识,并赋予“不允许的”或“不受限的”安全级别。在这个部分中,管理员可以制定四种类型的规则,按照优先级别分别是:散列规则、证书规则、路径规则和Internet区域规则,这些规则将对文件的访问和程序的运行提供最大限度的授权级别。 软件限制策略的设置 1、访问软件限制策略 作为本地安全策略的一部分,软件限制策略同时也包含在组策略中,这些策略的设置必须以administrator账户或Administrators组成员的身份登录系统。软件限制策略的访问方式有两种: (1)、在“开始”“运行”处运行secpol.msc,启动本地安全策略编辑器,在“安全设置”下可以看到“软件限制策略”项目。 (2)、在“开始”“运行”处运行gpedit.msc,启动组策略编辑器,在“计算机设置”“Windows设置”“安全设置”下可以看到“软件限制策略”。 2、新建软件限制策略 首次打开“软件限制策略”时,该项目是空的。策略需要由管理员手动添加。方法是点击“软件限制策略”使其处于选中状态,点击编辑器窗口“操作”菜单下的“新建一个策略”项目,此时可以看到“软件限制策略”下增加了“安全级别”和“其它规则”以及三条属性,如图2所示。一旦执行了新建策略操作后,就不能再次执行该操作,并且这个策略也不能删除。 3、设置默认的安全级别 新建软件限制策略后,策略的默认安全级别为“不受限的”,如果要更改默认的安全级别,需要在“安全级别”中进行设置,方法如下: (1)、打开“安全级别”,在右侧窗格中,可以看到有两条设置,其中图标中带有一个小对号的设置为默认设置; (2)、点击不是默认值的那条设置,单击右键,选择“设置为默认”项。当设置“不允许的”为默认值时,系统会显示一个提示信息对话框,点击“确定”即可。 该步骤也可以双击非默认的设置,在弹出的属性窗口中,点击“设为默认值”。 4、设置策略的作用范围和对象 通过策略的“强制”属性可以设置策略应用的软件文件是否包含库文件以及作用的对象是否包含管理员账户。通常情况下,为了避免引起系统不必要的问题以及便于对系统的管理,策略的作用范围应设置为不包含库文件的所有软体文件,作用对象设置为除本地管理员外的所有用户。设置的方法如下: (1)、单击“软件限制策略”,双击右侧窗格中的“强制”属性项目; (2)、选择“除去库文件(如Dll文件)以外的所有软体文件”选项和“除本地管理员以外的所有用户”选项,单击“确定”。 5、制定规则 只通过安全级别的设置,显然不能很好的实现对文件和程序的控制,必须通过制定合理的规则来标识那些禁止或允许运行的文件和程序,并进而实现对这些文件和程序的灵活控制。上文中提到可制定规则的类型有四种:散列规则、证书规则、路径规则和Internet区域规则。它们标识文件以及制定规则的方法如下: 散列规则:利用散列算法计算出指定文件的散列,这个散列是唯一标识该文件的一系列定长字节。制定了散列规则后,用户访问或运行文件时,软件限制策略会根据文件的散列及安全级别来允许或阻止对该文件进行访问或运行。当文件移动或重命名,不会影响文件的散列,软件限制策略对该文件依然有效。制定方法如下: (1)、点击“软件限制策略”下的“其它规则”,在“其他规则”上单击右键,或在右侧窗格的空白区域单击右键,选择“新散列规则”。 (2)、点击“浏览”,指定要标识的文件或程序,例如cmd.exe,确认后,在文件散列中可以看到计算出来的散列,在“安全级别”中选择“不允许的”或“不受限的”,点击“确定”,在“其它规则”中可以看到新增了一条类型为散列的规则。 证书规则:利用与文件或程序相关联的签名证书进行标识。证书规则需要的证书可以是自签名的、由证书颁发机构(CA)颁发或是由Windows2000公钥机构发布。证书规则不应用于EXE文件和DLL文件,它主要应用于脚本和Windows安装程序包。当某个文件由其关联的签名证书标识后,运行该文件时,软件限制策略会根据该文件的安全级别来决定是否可以运行。文件的移动和更名不会对证书规则的应用产生影响。制定证书规则时要求能够访问到用来标识文件的证书文件,证书文件的扩展名为.CER。创建方法同散列规则。 路径规则:利用文件或程序的路径进行标识,该规则可以针对一个指定的文件、用通配符表示的一类文件或是某一路径下的所有文件及子文件夹中的文件。由于标识是由路径来完成的,当文件移动或重命名时,路径规则会失去作用。在路径规则中,根据路径范围的大小,优先级别各有高低,范围越大,优先级越低。通常路径的优先级从高到低为:指定的文件、带路径的以通配符表示的一类文件、通配符表示的一类文件、路径、上一级路径。创建方法同散列规则。 Internet区域规则:利用应用程序下载的Internet区域进行标识。区域主要包括:Internet、本地Intranet、本地计算机、受限制的站点、受信任的站点。该规则主要应用于Windows的安装程序包。创建方法同散列规则。 6、维护可执行代码的文件类型 不论是那种规则,它所影响的文件类型只有“指派的文件类型”属性中列出的那些类型,这些类型是所有规则共享的。某些情况下,管理员可能需要删除或添加某种类型的文件,以便规则能够对这类文件失去或产生作用,这就需要我们来维护“指派的文件类型”属性。方法如下: (1)、单击“软件限制策略”,双击右侧窗格中的“指派的文件类型”属性项目; (2)、如果新增一种文件类型,在“文件扩展名”处输入添加的扩展名,点击“添加”;如果要删除一种文件类型,单击列表中的制定类型,点击“删除”。 7、利用规则的优先级灵活控制程序的运行 四种规则的优先级从高到依次为:散列规则、证书规则、路径规则、Internet区域规则。如果有超过一条以上的规则同时作用于同一个程序,那么优先级最高的规则设定的安全级别将决定该程序是否能运行。如果多于一条的同类规则作用于同一个程序,那么同类规则中最具限制力的规则将起作用。这为我们提供了一条对程序的运行进行灵活控制的途径。单一规则的作用效果虽然全面,但是也限制了我们所需要的那些部分,复合规则的综合作用将产生诸如“除了我们需要的/不需要的以外,其他全部不允许/不受限制”这样的效果,这也许才是我们真正需要的安全级别。 提示:软件限制策略的生效需要注销并重新登录系统。如果在软件限制策略中为一个程序制定了一条安全级别为“不受限的”规则,而这个程序包含在“不要运行指定的Windows应用程序”策略的不允许运行程序列表中,那么最终这个程序是不允许运行的。要取消对程序的限制,需要将相关的规则删除:在“其他规则”中的规则列表中,在要删除的规则上点击右键,选择“删除”即可。 上述三种限制程序运行的措施各有特点。从限制的实现方法和效果来看,限制用户对文件的访问权限可以让管理员以Administartor账户身份对所有用户的权限进行控制,作用的范围可以是所有类型的文件和文件夹,但是这种方法受到应用环境的限制。采取基于策略的措施,不论是启用“不要运行指定的Windows应用程序”策略还是设置软件限制策略,对于要限制的用户对象作用范围来讲都是用户组,不能针对具体的用户进行设置,要么是所有的用户,要么是除管理员组外的所有用户。但是这些措施对系统环境的要求不高,在XP系统中都可以进行实施。另外,基于策略的设置可以对计算机进行更加灵活的管理。特别是软件限制策略允许管理员通过多种方式对程序进行标识,对于程序的运行具有很高的可控性。
Ⅶ 数据结构中排序和查找各种时间复杂度
数据结构中排序和查找各种时间复杂度
(1)冒泡排序
冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
(2)选择排序
选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的。…… 例子说明好多了。序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了, 所以选择排序不稳定的排序算法
(3)插入排序
插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果和插入元素相等,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变。所以插入排序是稳定的。
(4)快速排序
快速排序有两个方向,左边的i下标一直往右走(往后),当a[i] <= a[center_index],其中center_index是中枢元素的数组下标,一般取为数组第0个元素。而右边的j下标一直往左走(往前),当a[j] > a[center_index]。如果i和j都走不动了,i <= j, 交换a[i]和a[j],重复上面的过程,直到i>j。 交换a[j]和a[center_index],完成一趟快速排序。在中枢元素和a[j]交换的时候,很有可能把前面的元素的稳定性打乱,比如序列为 5 3 3 4 3 8 9 10 11, 现在中枢元素5和3(第5个元素,下标从1开始计)交换就会把元素3的稳定性打乱,所以快速排序是一个不稳定的排序算法。(不稳定发生在中枢元素和a[j]交换的时刻)
(5)归并排序
归并排序是把序列递归地分成短序列,递归出口是短序列只有1个元素(认为直接有序)或者2个序列(1次比较和交换),然后把各个有序的段序列合并成一个有序的长序列。不断合并直到原序列全部排好序。相等时不发生交换。所以,归并排序也是稳定的排序算法。
(6)基数排序
基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序,最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。基数排序基于分别排序,分别收集,所以其是稳定的排序算法。
(7)希尔排序(shell)
希尔排序是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快;当元素基本有序了,步长很小,插入排序对于有序的序列效率很高。所以,希尔排序的时间复杂度会比o(n^2)好一些。由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以shell排序是不稳定的。
(8)堆排序
我们知道堆的结构是节点i的孩子为2*i和2*i+1节点,大顶堆要求父节点大于等于其2个子节点,小顶堆要求父节点小于等于其2个子节点。在一个长为n的序列,堆排序的过程是从第n/2开始和其子节点共3个值选择最大(大顶堆)或者最小(小顶堆),这3个元素之间的选择当然不会破坏稳定性。但当为n/2-1, n/2-2, ...1这些个父节点选择元素时,就会破坏稳定性。有可能第n/2个父节点交换把后面一个元素交换过去了,而第n/2-1个父节点把后面一个相同的元素没有交换,那么这2个相同的元素之间的稳定性就被破坏了。所以,堆排序是不稳定的排序算法
一、排序
排序法 平均时间 最差情形 稳定度 额外空间 备注
冒泡 O(n2) O(n2) 稳定 O(1) n小时较好
交换 O(n2) O(n2) 不稳定 O(1) n小时较好
选择 O(n2) O(n2) 不稳定 O(1) n小时较好
插入 O(n2) O(n2) 稳定 O(1) 大部分已排序时较好
Shell O(nlogn) O(ns) 1<s<2 不稳定???="" o(1)???????="" s是所选分组</s
快速 O(nlogn) O(n2) 不稳定 O(nlogn) n大时较好
归并 O(nlogn) O(nlogn) 稳定 O(1) n大时较好
堆 O(nlogn) O(nlogn) 不稳定 O(1) n大时较好
基数 O(logRB) O(logRB) 稳定 O(n) B是真数(0-9),R是基数(个十百)
二、查找
未写……
三 树图
克鲁斯卡尔算法的时间复杂度为O(eloge)
普里姆算法的时间复杂度为O(n2)
迪杰斯特拉算法的时间复杂度为O(n2)
拓扑排序算法的时间复杂度为O(n+e)
关键路径算法的时间复杂度为O(n+e)
Ⅷ 怎么配置cmakelist交叉编译
cmake交叉编译配置
很多时候,我们在开发的时候是面对嵌入式平台,因此由于资源的限制需要用到相关的交叉编译。即在你host宿主机上要生成target目标机的程序。里面牵扯到相关头文件的切换和编译器的选择以及环境变量的改变等,我今天仅仅简单介绍下相关CMake在面对交叉编译的时候,需要做的一些准备工作。
CMake给交叉编译预留了一个很好的变量CMAKE_TOOLCHAIN_FILE,它定义了一个文件的路径,这个文件即toolChain,里面set了一系列你需要改变的变量和属性,包括C_COMPILER,CXX_COMPILER,如果用Qt的话需要更改QT_QMAKE_EXECUTABLE以及如果用BOOST的话需要更改的BOOST_ROOT(具体查看相关Findxxx.cmake里面指定的路径)。CMake为了不让用户每次交叉编译都要重新输入这些命令,因此它带来toolChain机制,简而言之就是一个cmake脚本,内嵌了你需要改变以及需要set的所有交叉环境的设置。
toolChain脚本中设置的几个重要变量
1.CMAKE_SYSTEM_NAME:
即你目标机target所在的操作系统名称,比如ARM或者Linux你就需要写"Linux",如果Windows平台你就写"Windows",如果你的嵌入式平台没有相关OS你即需要写成"Generic",只有当CMAKE_SYSTEM_NAME这个变量被设置了,CMake才认为此时正在交叉编译,它会额外设置一个变量CMAKE_CROSSCOMPILING为TRUE.
2. CMAKE_C_COMPILER:
顾名思义,即C语言编译器,这里可以将变量设置成完整路径或者文件名,设置成完整路径有一个好处就是CMake会去这个路径下去寻找编译相关的其他工具比如linker,binutils等,如果你写的文件名带有arm-elf等等前缀,CMake会识别到并且去寻找相关的交叉编译器。
3. CMAKE_CXX_COMPILER:
同上,此时代表的是C++编译器。
4. CMAKE_FIND_ROOT_PATH:
指定了一个或者多个优先于其他搜索路径的搜索路径。比如你设置了/opt/arm/,所有的Find_xxx.cmake都会优先根据这个路径下的/usr/lib,/lib等进行查找,然后才会去你自己的/usr/lib和/lib进行查找,如果你有一些库是不被包含在/opt/arm里面的,你也可以显示指定多个值给CMAKE_FIND_ROOT_PATH,比如
set(CMAKE_FIND_ROOT_PATH /opt/arm /opt/inst)
该变量能够有效地重新定位在给定位置下进行搜索的根路径。该变量默认为空。当使用交叉编译时,该变量十分有用:用该变量指向目标环境的根目录,然后CMake将会在那里查找。
5. CMAKE_FIND_ROOT_PATH_MODE_PROGRAM:
对FIND_PROGRAM()起作用,有三种取值,NEVER,ONLY,BOTH,第一个表示不在你CMAKE_FIND_ROOT_PATH下进行查找,第二个表示只在这个路径下查找,第三个表示先查找这个路径,再查找全局路径,对于这个变量来说,一般都是调用宿主机的程序,所以一般都设置成NEVER
6. CMAKE_FIND_ROOT_PATH_MODE_LIBRARY:
对FIND_LIBRARY()起作用,表示在链接的时候的库的相关选项,因此这里需要设置成ONLY来保证我们的库是在交叉环境中找的.
7. CMAKE_FIND_ROOT_PATH_MODE_INCLUDE:
对FIND_PATH()和FIND_FILE()起作用,一般来说也是ONLY,如果你想改变,一般也是在相关的FIND命令中增加option来改变局部设置,有NO_CMAKE_FIND_ROOT_PATH,ONLY_CMAKE_FIND_ROOT_PATH,BOTH_CMAKE_FIND_ROOT_PATH
8. BOOST_ROOT:
对于需要boost库的用户来说,相关的boost库路径配置也需要设置,因此这里的路径即ARM下的boost路径,里面有include和lib。
9. QT_QMAKE_EXECUTABLE:
对于Qt用户来说,需要更改相关的qmake命令切换成嵌入式版本,因此这里需要指定成相应的qmake路径(指定到qmake本身)
toolChain demo
# this is required
SET(CMAKE_SYSTEM_NAME Linux)
# specify the cross compiler
SET(CMAKE_C_COMPILER /opt/arm/usr/bin/ppc_74xx-gcc)
SET(CMAKE_CXX_COMPILER /opt/arm/usr/bin/ppc_74xx-g++)
# where is the target environment
SET(CMAKE_FIND_ROOT_PATH /opt/arm/ppc_74xx /home/rickk/arm_inst)
# search for programs in the build host directories (not necessary)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
# configure Boost and Qt
SET(QT_QMAKE_EXECUTABLE /opt/qt-embedded/qmake)
SET(BOOST_ROOT /opt/boost_arm)
这样就完成了相关toolChain的编写,之后,你可以灵活的选择到底采用宿主机版本还是开发机版本,之间的区别仅仅是一条-DCMAKE_TOOLCHAIN_FILE=./toolChain.cmake,更爽的是,如果你有很多程序需要做转移,但目标平台是同一个,你仅仅需要写一份toolChain放在一个地方,就可以给所有工程使用。
Ⅸ cmake中target_link_libraries()使用问题动态库使用绝对路径没问题,但是使用相对路径就矬了
使用相对路径的时候,你要让cmake能够搜索到找到你动态库,就像直接使用gcc/g++来链接的时候一样,要使用-L来指定第三方库所在路径。cmake可以使用 LINK_DIRECTORIES 命令来指定第三方库所在路径,比如,你的动态库在/home/myproject/libs这个路径下,则通过命令:LINK_DIRECTORIES(/home/myproject/libs),把该路径添加到第三方库搜索路径中,这样就可以使用相对路径了,使用TARGET_LINK_LIBRARIES的时候,只需要给出动态链接库的名字就行了。
拓展:
1、CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。
2、只是 CMake 的组态档取名为 CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。
Ⅹ 迷宫算法 上下左右 优先级问题
迷宫一般采用递归算法,而且出口位置在算法开始时候是不知道的吧。而且迷宫的出口也不会固定到哪一个方向。如果采用枚举方法一般是按顺时针或者逆时针找,这样才可以用循环来做,如果采用优先,只能将每个方向定位,设一个常量,那样的话每次递归都要判断一下,非常麻烦,估计还比不用优先还慢一些。