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 

就能够引用咱们编译好的库了。

相关文章
相关标签/搜索