2021-05-12 14:32:11
CMake快速使用教學
如果你覺得makefile看著就頭痛,如果當工程越來越大,你越來越手足無措,如果你厭倦了在編譯的時候打上一大堆命令,那麼你有必要花十分鐘來看一下下面的內容。
一、HelloWorld
首先建立一個test1資料夾,裡面建立一個main.c檔案,內容如下:
#include <stdio.h>
int main()
{
printf("Hello World!n");
return 0;
}
再建立一個CMakeLists.txt
PROJECT (HELLO)
SET(SRC_LIST main.c)
ADD_EXECUTABLE(hello ${SRC_LIST})
第一行:設定專案名稱;
第二行:將SRC_LIST值設定為main.c
第三行:生成可執行檔案 hello。 ${} 是參照某個值。
Terminal中cd進入到test1目錄,建立一個build目錄用於外部構建(編譯所產生的檔案都生成在build目錄),依次執行下面三條命令:
cmake ..
make
./hello
得到的結果如下:
如果要參照內部庫的話,比如是關於SDL和opengl的程式,需要在CMakeLists.txt中新增
TARGET_LINK_LIBRARIES(hello SDL)
TARGET_LINK_LIBRARIES(hello GLU)
對應終端的編譯命令就是:
-lSDL -lGLU
若不是參照內部庫,則需要將相應目錄新增進來,用到的是INCLUDE_DIRECTORIES命令。
二、庫的構建與安裝
這次我們的目標是:
1,建立一個靜態庫和動態庫,提供 HelloFunc 函數供其他程式程式設計使用,HelloFunc 向終端輸出
Hello World 字串。
2,安裝標頭檔案與共用庫。
目錄安排如下:
build-用於外部編譯;
libhello-hello庫的原始檔;
src-主程式
首先看libhello裡的檔案:
/*filename:hello.h*/
#ifndef DBZHANG_HELLO_
#define DBZHANG_HELLO_
void hello(const char* name);
#endif //DBZHANG_HELLO_
/*filename:hello.c*/
#include <stdio.h>
#include "hello.h"
void hello(const char * name)
{
printf ("Hello %s!n", name);
}
CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
set(LIB_SRC hello.c)
add_library(libhello STATIC ${LIB_SRC})
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
set_target_properties(libhello PROPERTIES OUTPUT_NAME "hello")
install(TARGETS libhello
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
install(FILES hello.h DESTINATION include/hello)
src資料夾
/*filename:main.c*/
#include "hello.h"
int main()
{
hello("Jack");
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
include_directories(${PROJECT_SOURCE_DIR}/libhello)
set(APP_SRC main.c)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
add_executable(main ${APP_SRC})
target_link_libraries(main libhello)
最外面的CMakeLists.txt
project(HELLO)
add_subdirectory(src)
add_subdirectory(libhello)
解釋:
除build目錄外每一個目錄都要建立一個CMakeLists.txt.
生成庫的語句:add_library(libhello STATIC ${LIB_SRC})
這條語句是建立靜態庫,若要建立動態庫的話將STATIC改成SHARED.
install命令負責庫的安裝。
make一下,結果就像這樣:
再sudo make install.
安裝好庫之後,我們在想使用hello方法的時候,只要新增標頭檔案#include就可以了,編譯的時候
g++ main .c -o main -lhello
就可以參照我們編譯好的庫了。
Ubuntu 12.04利用CMake-2.8.10.4編譯OpenCV-2.4.4 http://www.linuxidc.com/Linux/2014-04/100113.htm
CMake並沒有想象中好用 http://www.linuxidc.com/Linux/2014-03/98799.htm
CMake 設定交叉編譯環境 http://www.linuxidc.com/Linux/2014-03/98622.htm
MySQL編譯安裝 之 CMake http://www.linuxidc.com/Linux/2013-09/90113.htm
基於CMake編譯安裝MySQL 5.5 http://www.linuxidc.com/Linux/2013-04/83579.htm
相關文章