cmake是怎麼找到編譯器的
Ⅰ cmake使用的編譯器和交叉編譯時候的一致么
一致的
下載cmake 然後解壓縮,進入解壓縮後的目錄,依次執行
# ./bootstrap
# make && make install
安裝過程需要幾分鍾。
二 構建交叉編譯的CMakeLists.txt
說明:
設置交叉編譯之前,必須在CMakeList.txt前面加上這樣一句,這樣CMake才會認為你是要交叉編譯:
SET(CMAKE_SYSTEM_NAME Linux)
在通知CMake要交叉編譯以後,還要告訴CMake到哪個路徑下去找庫文件,因為在交叉編譯的時候CMake是不會自動去系統默認的目錄找庫文件和頭文件的:
SET(CMAKE_FIND_ROOT_PATH "編譯器環境路徑")
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
其中猜早的第一行,是告訴CMake查找的根目錄是什麼。後面分別是告訴CMake怎麼查找編譯時候的工具程序的位置、庫的位置和頭文件的位置。設置為NEVER表示不查找,設置為ONLY表示只在CMAKE_FIND_ROOT_PATH設定的目錄下查找,設置為BOTH(這是默認選項)表示既可以在寬雹系統目錄下查找,也可以在CMAKE_FIND_ROOT_PATH下查找。因為咱們是交叉編譯,所以後兩項的設置了ONLY,對於編譯時調用工具,一般來說是需要在系統目錄下查找的,不過我不需要所以設慎兆帆置為NEVER。
然後,設置編譯器:
SET(CMAKE_C_COMPILER "編譯器環境路徑"
直接把編譯器的路徑設置過去就可以了,CMAKE_C_COMPILER是C語言編譯器,CMAKE_CXX_COMPILE是C++語言編譯器。
Ⅱ 怎麼配置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放在一個地方,就可以給所有工程使用。
Ⅲ 安裝opencv必須要安裝Cmake嗎Cmake是干什麼的
首先,我想說的是cmake的作用,每個編譯器在調用頭文件並褲喚的時候都需要編譯器配置好讀取頭文件(*.h)對應的(*.c||*.cpp)的路徑,就像調用math.h你得告訴編譯器對應的math.c要去什麼地方尋找,但是新下載的opencv編譯器是不知道相應的頭文件還有lib文件要去哪裡找的,所以程序猿們可以有以下兩種方案:絕凱
1.
每次創建一個工程,找到調用文件的配置選項,然後手動添加,告訴編譯器cv.h在哪,各種庫文件(*.lib)文件在哪,當然既然涉及到系統的問題,少不了要去環境變數配置一下系統設置,不過配置環境變數僅僅用一次就可以了。
2.
為了省去每次創建工程都需要手動配置路徑的麻煩,用cmake可以將opencv的相關文件在哪裡「永久地」告訴編譯器,當然代價就是……失敗幾率很大(反正我總是配不好,一步出純乎問題就會很蛋疼)
Ⅳ cmake 在Windows 命令行怎麼指定編譯器
可神笑以使用cmake --version 查看 如果輸出 cmake的版本號說轎緩明已經正閉瞎模確安裝了cmake 如果提示沒有cmake這個命令
Ⅳ Cmake與MinGW配合使用
安裝MinGW,配置環境變數 :..\mingw32\bin
把 :..\mingw32\bin\mingw32-make.exe 改名為 make.exe(個人喜好,方便後邊編譯)
安裝肢空Cmake配置環境變數:.../Cmake/bin
Cmake-GUI使用:
選擇路徑:
source code:CMakeLists.txt文件所在的目錄
build to bin:編譯中間結果所在的位置
然後點擊 config>>選擇 MinGW makefile>>選擇本地編譯器>>選擇位置>>點擊確定>>等待配置完畢>>點擊 generate>>生成makefile文件>>在此處打開cmd>>make命令(實質上是調用了 MinGW的make.exe)
Cmake命令行使用:
-G 指明生成的Makefile格式
-D 添加參數
-S 指明源碼位置
-B 指明輸出路徑歷衡瞎
例如:
cmake -G "MinGW Makefiles" -S "源碼路徑" -B "輸出路徑"
或攔譽者
cmake -G "MinGW Makefiles" -D CMAKE_TOOLCHAIN_FILE="編譯工具鏈路徑" -S "源碼路徑" -B "輸出路徑"
注意:Cmake是不支持中文的,無論是GUI還是命令行,都嚴禁出現中文字元.
Ⅵ osg+vs2015+win10配置 cmake時選擇哪個編譯器
解決Win10系統無法安裝VS2015的方法教程1、如果你在安裝過程中,出現安裝失敗的問題,不妨重新打開下載的那個安裝程序,選擇修復; 2、有用戶反應在安裝前對系統進行了如下設置, 一是,自行安裝了運行庫——vc++和.NET Framework 二是,卸載了系統內置應用——Groove音樂、電影和電視 所以,准備安裝Visual Studio的朋友們注意了,一定不要進行上面這兩個操作不然。安裝不上的用戶建議重新安裝Windows10並在第一時間安裝Visual Studio 2015。 通過上述方法我們就能夠讓win10系統更好的兼容VS2015的安裝了, 如果在安裝VS2015之前,你對系統做了部分修改,導致出現無法安裝的問題,那麼可將系統還原出廠設置後,再嘗試安裝該軟體!
Ⅶ 如何檢測c ++ 11支持帶有cmake的編譯器
直接測試新寫法:
[plain] view plain
<pre name="code" class="plain">#CMakeLists.txt
project(test)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
elseif(COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()
測試c++11代碼
[cpp] view plain
/茄困/test.cc
#include <iostream>
#include<vector>
using namespace std;
int main()
{
const std::vector<int>v(1);
auto a = v[0];//a為int類顫李念型
cout <<"a : "<< a <<endl;
decltype(v[0]) b = 0;//b為const int&類型,即std::vector<int>::operator[](size_type)const的返回類型
auto c = 0;//c為int類型
auto d = c;//d為int類型
decltype(c) e;//e為int類型,c實體的類型
decltype((c)) f = e;//f為int&類型,因為(c)是左值
decltype(0) g;//g為int類型,因為0是右值
return 0;
}
所以,不擾敬同版本的gcc給指定c++11支持設定了不同的標志,也就說老版本支持-std=c++0x的寫法,新版本用-std=c++11的寫法。以上程序就是判斷本機的g++該使用那種輸出版本。
Ⅷ cmake里哪個是dev c++的編譯器
CMake是一個跨平台的安裝(編譯)工具,可以用簡單的語句來描述所有平台的安裝(編譯過程)。他能夠輸出各種各樣的makefile或者project文件,能測試編譯器所支持的C++特性,類似UNIX下的automake。只是 CMake 的組態檔取名為 CMakeLists.txt。Cmake 並不直接建構出最終的軟體,而是產生標準的建構檔(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然後再依一般的建構方式使用。這使得熟悉某個集成開發環境(IDE)的開發者可以用標準的方式建構他的軟體,這種可以使用各平台的原生建構系統的能力是 CMake 和 SCons 等其他類似系統的區別之處。
下載cmake
Windows版本安裝直接運行EXE
LINUX版本的安裝:
安裝cmake
cmake-*.*.*tar.gz為下載下來的源碼包
tar xvf cmake-*.*.*.tar.gz
cd cmake-*.*.*
./bootstrap
make
make install
如果已經安裝了cmake,想要安裝新版本,則:
cd cmake-*.*.*
cmake .
make
make install
Ⅸ cmake 在Windows 命令行怎麼指定編譯器
CMake是一個比make更高級的編譯配置工具,它可以根據不同平台、不同的編譯器,生成相應的Makefile或者vcproj項目。
通過編寫CMakeLists.txt,可以控制生成的Makefile,從而控制編譯過程。CMake自動生成的Makefile不僅可以通過make命令構建項目生成目標文件,還支持安裝(make install)、測試安裝的程序是否能正確執行(make test,或者ctest)、生成當前平台的安裝包(make package)、生成源碼包(make package_source)、產生Dashboard顯示數據並上傳等高級功能,只要在CMakeLists.txt中簡單配置,就可以完成很多復雜的功能,包括寫測試用例。
如果有嵌套目錄,子目錄下可以有自己的CMakeLists.txt。
總之,CMake是一個非常強大的編譯自動配置工具,支持各種平台,KDE也是用它編譯的,感興趣的可以試用一下。
准備活動:
(1)安裝cmake。
下載地址:http://www.cmake.org/cmake/resources/software.html
根據自己的需要下載相應的包即可,Windows下可以下載zip壓縮的綠色版本,還可以下載源代碼。
Windows下CMake的使用
(2)運行cmake的方法。(GUI、命令行)
http://www.cmake.org/cmake/help/runningcmake.html
CMake使用步驟:
運行GUI的cmake界面:
cmake-2.8.1-win32-x86\bin\cmake-gui.exe
Windows下CMake的使用
執行Configure:
運行之後,生成了如下文件:
Windows下CMake的使用
生成Makefile:
執行Generate之後生成如下文件:
Windows下CMake的使用
運行make進行編譯:
Windows下CMake的使用
編譯完成後,在build目錄生成Tutorial.exe,運行Tutorial.exe 25就可以看到運行結果:
Windows下CMake的使用
運行make install安裝程序:
Windows下CMake的使用
運行make test進行測試:
Windows下CMake的使用
通過cmake tutorial學習CMake配置方法
http://www.cmake.org/cmake/help/cmake_tutorial.html
可以在源代碼的Tests/Turorial目錄中找到這個手冊對應的代碼。
Windows下CMake的使用
1、Step1。
(如果不知道如何使用cmake,以及如何使用編譯產生的Turorial.exe,可先看下前面「CMake使用步驟」的說明,它以Step4為例詳細介紹了使用過程,Step1的配置可能不夠完全,比如無法運行make install,無法運行make test,但可以參考。)
簡單的程序編譯。
(1)運行GUI的cmake,指定要編譯的源代碼路徑和二進制文件路徑(會自動創建)。
Windows下CMake的使用
(2)點擊Configure,配置成功後,再點擊Generate。
配置需要選擇合適的編譯器,雖然我安裝了VC2008,但沒有配置成功;選擇Unix Makefiles,配置成功,它自動找到了DevC++下的gcc.exe等編譯器。
Windows下CMake的使用
(3)在build3目錄執行make,就能夠編譯生成Turorial.exe了。
D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>make
Linking CXX executable Tutorial.exe
[100%] Built target Tutorial
可以運行一下Turorial.exe:
D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>Tutorial.exe
Tutorial.exe Version 1.0
Usage: Tutorial.exe number
D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>Tutorial.exe 4
The square root of 4 is 2
2、Step2
把子目錄編譯為庫,並且鏈接到最終的可執行文件。
include_directories ("${PROJECT_SOURCE_DIR}/MathFunctions")
add_subdirectory (MathFunctions) # 使得子目錄MathFunctions也能被編譯
# add the executable
add_executable (Tutorial tutorial.cxx)
target_link_libraries (Tutorial MathFunctions)
產生makefile:
在GUI上點擊Configure,之後Generate還是灰色,再次點擊Configure,Generate就可以點擊了。
編譯:
Ⅹ cmake 在Windows 命令行怎麼指定編譯器
比如: D:\temp>cmake CmakeList.txt -G "Visual Studio 8 2005"