㈠ 求大神,cmake編譯目錄問題,求解答
通過『開始』>『所有程序』>『CMake 2.』8>『CMake』來運行CMake(CMake-GUI)(這里假定在簡體中文Windows中運行2.8版本)
在"Where is the source code"文本框中,輸入或者「browse」到源代碼的根目錄
在"Where to build the binaries" 文本框中,輸入或者「browse」到輸出文件夾。
單擊屏幕下方的'Configure'按鍵。
選擇你的目標編譯平台,例如"Visual Studio 10 2010"
當系統提示是否創建構建目錄的時候選擇'Ok'
等待configure執行結束。
屏幕上現在會有一些配置設置,並用紅色標記(這是用來指出你是第一次看到他們)。你可以在這裏手動配置這些選項,不過現在我們只需要再次選擇'Configure'。
等運行結束了選擇"Generate"按鍵。
㈡ 想要編譯linux內核,如何得知應該在哪個路徑下進行make啊
直接在內核源碼的根目錄,直接make就行,不用加ARCH=xxx。
㈢ cmake中修改默認編譯器的兩個問題
在為交叉編譯工程寫cmake腳本時,可以在腳本里修改默認編譯器的值。這種方法會碰到下面兩個問題
例如,下面是一個經過簡化後的CMakeLists.txt:
cmake+make的輸出如下:
可以看到,set(CMAKE_CXX_COMPILER "/usr/bin/g++-4.8")命令之後,默認編譯器已經由g++-5.5修改為了g++-4.8,且編譯階段確實也使用的是g++-4.8。但是此時CMAKE_CXX_COMPILER_VERSION的值仍然是5.5。
例如,頂層CMakeLists.txt中的內容如下:
子目錄sub/CMakeLists.txt中只有一行:
cmake就會陷入死循環:
問題1:
問題2:
但是有個更簡單的方法,可以解決以上所有問題:
在第一個project命令前,修改默認編譯器的定義。
例如:
㈣ 如何使用CMake進行交叉編譯
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 編譯得到的文件在哪
舉個例子來說,假如想編譯自己寫的基於OpenCV的程序那麼
如果你是使用的是ubuntu的話,就很方便。
如果你使用gflags和glog的話那麼執行安裝:
[plain] view plain
sudo apt-get install libgoogle-glog-dev libflags-dev
如果你還使用protobuf那麼執行安裝
[plain] view plain
sudo apt-get install protobuf-compiler libprotobuf-dev
如果你使用boost
[plain] view plain
sudo apt-get install libboost-all-dev
㈥ makefile中怎麼獲取makefile文件本身的絕對路徑
你應該說的是gcc來編譯吧,gcc在makefile里邊就是一個命令,你的要求是指定頭文件的目錄,那麼可以用-I選項來指定。比如,你在src/include/目錄中放了很多頭文件,那麼可以參照如下: myapp: main.o gcc $^ -o $@ main.o: main.c gcc -Isrc/incl...
㈦ 請問在GNU C++的Windows版本編譯器中,make的默認的makefile放在哪裡
你用得是 DEV-CPP MINGW?
文件夾下有 makefile名字得文件啊。。。裡面寫了
g++ test.cpp -o test這句話吧?
㈧ linux編譯的make moles命令編譯規則是哪來的,為什麼這個命令會生效,可以查的到嗎
make 默認會讀取當前目錄裡面 Makefile 文件,這個文件裡面可以設定目標名,也就是 moles 這個參數。
所以你 make moles 可以運行。
但是到別的目錄上, make moles 就不能用。
㈨ 如何指定Makefile編譯目標文件到指定目錄
可以參考Makefile視頻教程:Makefile工程實踐
一步一步從零開始寫項目的Makefile
不僅可以編譯目標文件到指定目錄
源文件、中間生成的臨時文件、頭文件都可以放到指定目錄,這是一個項目的基本需求。
㈩ linux下用make編譯C++項目的問題。
從錯誤信息上看,你引用了」/src/makedir.mkinc「文件,應該是引用路徑不對。
檢查一下你的path_project_common定義的是什麼,感覺是被定義到了」/」。