CMake快速使用教程

來源:互聯網
上載者:User

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

CMake並沒有想象中好用

CMake 設定交叉編譯環境

MySQL編譯安裝 之 CMake

基於CMake編譯安裝MySQL 5.5 

CMake 的詳細介紹:請點這裡
CMake 的:請點這裡

本文永久更新連結地址:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.