10分鐘搞定cmake

       若是你以爲makefile看着就頭痛,若是當工程愈來愈大,你愈來愈手足無措,若是你厭倦了在編譯的時候打上一大堆命令,那麼你有必要花十分鐘來看一下下面的內容。html

1、HelloWorld編程

       首先建立一個test1文件夾,裏面建立一個main.c文件,內容以下:ide

#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。 ${} 是引用某個值。ui

Terminal中cd進入到test1目錄,建立一個build目錄用於外部構建(編譯所產生的文件都生成在build目錄),依次執行下面三條命令:spa

cmake .. make ./hello

獲得的結果以下:



若是要引用內部庫的話,好比是關於SDL和opengl的程序,須要在CMakeLists.txt中添加code

TARGET_LINK_LIBRARIES(hello SDL) TARGET_LINK_LIBRARIES(hello GLU)

對應終端的編譯命令就是:

-lSDL -lGLU

若不是引用內部庫,則須要將相應目錄添加進來,用到的是 INCLUDE_DIRECTORIES 命令。


2、庫的構建與安裝htm

此次咱們的目標是:字符串

1,創建一個靜態庫和動態庫,提供 HelloFunc 函數供其餘程序編程使用,HelloFunc 向終端輸出
Hello World 字符串。
2,安裝頭文件與共享庫。
get

目錄安排以下:



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<hello.h>就能夠了,編譯的時候

g++ main .c -o main -lhello 

就能夠引用咱們編譯好的庫了。

相關文章
相關標籤/搜索