Welcome 微信登录

首页 / 操作系统 / Linux / CMake快速使用教程

如果你觉得makefile看着就头痛,如果当工程越来越大,你越来越手足无措,如果你厌倦了在编译的时候打上一大堆命令,那么你有必要花十分钟来看一下下面的内容。一、HelloWorld首先创建一个test1文件夹,里面创建一个main.c文件,内容如下:#include <stdio.h>
int main()
{
 printf("Hello World! ");
 return 0;
}再创建一个CMakeLists.txtPROJECT (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! ", name);
}CMakeLists.txtcmake_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.txtcmake_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.txtproject(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.htmCMake并没有想象中好用 http://www.linuxidc.com/Linux/2014-03/98799.htmCMake 设置交叉编译环境 http://www.linuxidc.com/Linux/2014-03/98622.htmMySQL编译安装 之 CMake http://www.linuxidc.com/Linux/2013-09/90113.htm基于CMake编译安装MySQL 5.5  http://www.linuxidc.com/Linux/2013-04/83579.htmCMake 的详细介绍:请点这里
CMake 的下载地址:请点这里本文永久更新链接地址