2009年2月10日 星期二

自動產生Makefile - CMake

在尋找autotools的文章當中,發現,有一個新的東西CMake,聽說比automake好用。
那就研究一下吧~

實驗一:單一程式檔的 Hello World:
先來個第一步吧~hello world!!
建立CMake/hello/
下面有兩個檔案:CMakeLists.txt與hello.c

ren@notebook:~/Desktop$ tree CMake
CMake
|-- hello
| |-- CMakeLists.txt
| `-- hello.c

hello.c
#include <stdio.h>
int main(){
printf("Hello World!\n");
return 0;
}

CMakeLists.txt
# Project name
PROJECT (HELLO)
# set the variable HELLO_SRCS to be "hello.c"
SET (HELLO_SRCS hello.c)
# helloDemo executable built from hello.c
ADD_EXECUTABLE (hello ${HELLO_SRCS})

$ cmake .
$ make VERBOSE=1


實驗二:把 Hello World 變成函式庫
實驗三:試試使用外部函式庫 libpng 的情況
實驗四:換試試寫個簡單的 Qt4 程式
請參考這裡

小技巧
哇!在產生Makefile的過程中,會產生一堆檔案,因為要透過svn上資料到server的話,沒有把這一些資料刪除,會很占空間的,這個時候out-source building就派上用場啦~
在剛剛的hello資料夾下產生一個build/的資料夾
$ mkdir build
$ cd build
$ cmake ..
$ make

這個時候產生的檔案都會在build/的資料夾下喔~要刪掉直接刪它就好啦~

用CMake編出來的Makefile在編譯時,不會出現詳細的編譯過程,原來加上VERBOSE=1就可以啦
$ make VERBOSE=1

CMakeLists.txt的內容說明
# Project name
PROJECT(HELLO)
# Source code subdirectories
SUBDIRS(src test)
# Create a library from the hello.cxx file
ADD_LIBRARY(Hello hello.c)
# Location of library include files
INCLUDE_DIRECTORIES(${HELLO_SOURCE_DIR}/src)
# Library location for the linker
LINK_DIRECTORIES(${HELLO_BINARY_DIR}/src)
# helloDemo executable built from demo.c
ADD_EXECUTABLE(helloDemo demo.c)
# Link the executable to the Hello library.
TARGET_LINK_LIBRARIES(helloDemo Hello)


參考資料:
把玩 CMake 的第一步
CMake
貓也會的 CMake
CMake實踐
Jserv「貓也會的 CMake」簡報投影片
在 linux 下使用 CMake 構建應用程序

沒有留言: