Ⅰ 關於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 等其他類似系統的區別之處。
Ⅹ 迷宮演算法 上下左右 優先順序問題
迷宮一般採用遞歸演算法,而且出口位置在演算法開始時候是不知道的吧。而且迷宮的出口也不會固定到哪一個方向。如果採用枚舉方法一般是按順時針或者逆時針找,這樣才可以用循環來做,如果採用優先,只能將每個方向定位,設一個常量,那樣的話每次遞歸都要判斷一下,非常麻煩,估計還比不用優先還慢一些。