① 如何才能使CMake生成的可執行程序便於調試
出現的原因是導入的此makefile工程不是debug模式的,所以不包含調試信息,自然不能打斷點調試了。因此,要解決這個問題就要考慮如何修改CMakeLists.txt使其生成的makefile文件進而生成Debug模式下的帶調試信息的可執行程序;
我們先寫一個簡單的測試例子來測試一下,如何加調試信息:
假設文件結構如下:
./test6
|
+ ------ CmakeLists.txt
+ ------ main.cpp
+ ------ src_a
|
+ ------ CmakeLists.txt
+ ------ Testa.h
+ ------ Testa.cpp
+ ------ src_so
|
+ ------ CmakeLists.txt
+ ------ Testso.h
+ ------ Testso.cpp
第一步:test6目錄下CmakeLists.txt
cmake_minimum_required(VERSION 3.3)
project(main )
add_subdirectory(src_a ) // 給當前工程目錄添加子目錄 src_a
add_subdirectory(src_so ) // 給當前工程目錄添加子目錄 src_so
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") //添加調試信息
set(EXECUTABLE_OUTPUT_PATH $ {PROJECT_SOURCE_DIR}/bin) //設置可執行文件的生成路徑
include_directories($ {PROJECT_SOURCE_DIR}/src_a ${PROJECT_SOURCE_DIR}/src_so) //包含庫頭文件
aux_source_directory(. DIR_SRCS ) // 將當前目錄中的源文件名稱賦值給變數 DIR_SRCS
add_executable(main $ {DIR_SRCS}) //表示 DIR_SRCS中的源文件需要編譯成名為 main的可執行文件
target_link_libraries (main Testa Testso) //將庫文件鏈接到生成的目標可執行文件
第二步:子目錄目錄下CmakeLists.txt
1,src_a中靜態庫的編譯生成
cmake_minimum_required(VERSION 3.3) //該命令限定了 CMake 的版本
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") //添加調試信息
set(LIBRARY_OUTPUT_PATH $ {PROJECT_SOURCE_DIR}/bin) //設置Lib 靜態庫生成路徑
aux_source_directory(. LIBA_SRC) //將當前目錄中的源文件名稱賦值給變數 LIBA_SRC
add_library(Testad STATIC $ {LIBA_SRC}) //將變數 LIBA_SRC中的源文件編譯為靜態庫,庫文件名稱為 Testa
2,src_so中動態庫的編譯生成
cmake_minimum_required(VERSION 3.3) //該命令限定了 CMake 的版本
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") //添加調試信息
set(LIBRARY_OUTPUT_PATH $ {PROJECT_SOURCE_DIR}/bin) //設置Lib 動態庫庫生成路徑
aux_source_directory(. LIBSO_SRC) //將當前目錄中的源文件名稱賦值給變數 LIBA_SRC
add_library(Testsod SHARED $ {LIBSO_SRC}) //將變數 LIBA_SRC中的源文件編譯為動態庫,庫文件名稱為 Testso
此處執行cmake時有兩種方式:
1,在cmake的gui界面中設定生成Debug模式,
2,在執行cmake時使用如下命令:cmake -DCMAKE_BUILD_TYPE=Debug/Release path
關於ccmake的使用,這里簡單的做個說明:
1.首先在終端啟動cmake的gui界面:"ccmake ." 效果如圖:
2.然後在gui中輸入"c",效果如圖:
3.然後在gui中輸入"e",效果如圖:
4.此時在gui界面點擊"enter"回車鍵進行編輯:編輯完再次點擊回車退出編輯。
5.點擊"c",之後再次點擊"g"。此時makefile文件已經生成好了。make之後生成的可執行文件是帶有調試信息的,就可用gdb進行調試了(導入Eclipse也可以進行打斷點調試)。
② 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 等其他類似系統的區別之處。
③ CMake,configue出錯,以下是錯誤信息。怎麼弄 vs2010的。
CMake,configue出錯,彈出框「Error in configuration process,project files may be invalid」是設置錯誤造成的,解決方法如下:
1、首先編寫如下所示的main.cpp。
④ linux下面cmake命令意義cmake -D CMAKE_BUILD_TYPE=RELEASE
"怎麼知道在源代碼目錄中編譯的呢?" 這個是因為後邊的那 .. 的緣故, .. 表示上層目錄. 那.. 就是<path to the OpenCV source directory>
-D 相當於就是定義, -D 可以理解為告訴cmake 後邊我要定義一些參數了, 你每定義一個就在前邊加上-D就是了
CMAKE_BUILD_TYPE 這種東西往往是在CMakeList.txt 中定義的, 這個是你要編譯的類型, 一般的選擇有debug,release, 但是不確定
CMAKE_INSTALL_PREFIX 這個是安裝路徑.
⑤ 【CMAKE】求助-cmake 請問誰知道CMAKE如何使用真正的初學者,win7系統,使用VS2005
這是在bash(或win下的mingw什麼的)命令行上敲的命令...
⑥ make如何指定cmake路徑
先在cmakelist.txt所在目錄執行cmake,而後再make
⑦ make makefile cmake qmake都是什麼,有什麼區別
你好
make 是用來執行Makefile的。
Makefile是類unix環境下(比如Linux)的類似於批處理的"腳本"文件。其基本語法是: 目標+依賴+命令,只有在目標文件不存在,或目標比依賴的文件更舊,命令才會被執行。由此可見,Makefile和make可適用於任意工作,不限於編程。比如,可以用來管理latex。
Makefile+make可理解為類unix環境下的項目管理工具,但它太基礎了,抽象程度不高,而且在windows下不太友好(針對visual studio用戶),於是就有了跨平台項目管理工具cmake
cmake是跨平台項目管理工具,它用更抽象的語法來組織項目。雖然,仍然是目標,依賴之類的,但更為抽象和友好,比如可用math表示數學庫,而不需要再具體指定到底是math.dll還是libmath.so,在windows下它會支持生成visual studio的工程,在linux下它會生成Makefile,甚至它還能生成eclipse工程文件。也就是說,從同一個抽象規則出發,它為各個編譯器定製工程文件。
cmake是抽象層次更高的項目管理工具,cmake命令執行的CMakeLists.txt文件
qmake是Qt專用的項目管理工具,對應的工程文件是*.pro,在Linux下面它也會生成Makefile,當然,在命令行下才會需要手動執行qmake,完全可以在qtcreator這個專用的IDE下面打開*.pro文件,使用qmake命令的繁瑣細節不用管了。
總結一下,make用來執行Makefile,cmake用來執行CMakeLists.txt,qmake用來處理*.pro工程文件。Makefile的抽象層次最低,cmake和qmake在Linux等環境下最後還是會生成一個Makefile。cmake和qmake支持跨平台,cmake的做法是生成指定編譯器的工程文件,而qmake完全自成體系。
希望對你有幫助
⑧ cmake 在Windows 命令行怎麼指定編譯器
比如: D:\temp>cmake CmakeList.txt -G "Visual Studio 8 2005"
⑨ 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就可以點擊了。
編譯: