静态库与动态库构建以及使用
1.静态库与动态库构建的实例(并上传到系统中,路径为:/usr/lib和/usr/unclude/hello)
1)在空的项目建立build文件夹(空的)和CMakeLists.txt,具体的内容如下:
①CMakeLists.txt
PROJECT(HELLOLIB) ADD_SUBDIRECTORY(lib)
2)在空的项目构建lib文件夹
3)在lib文件夹里面加hello.c,hello.h和CMakeLists.txt,具体内容如下:
①hello.c
#include "hello.h" void HelloFunc() { printf("Hello World\n"); }
②hello.h
#ifndef HELLO_H #define HELLO_H #include <stdio.h> void HelloFunc(); #endif
③CMakeLists.txt
SET(LIBHELLO_SRC hello.c) ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC}) ADD_LIBRARY(hello_static STATIC ${LIBHELLO_SRC}) SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello") GET_TARGET_PROPERTY(OUTPUT_VALUE hello_static OUTPUT_NAME) MESSAGE(STATUS "This is the hello_static OUTPUT_NAME:" ${OUTPUT_VALUE}) SET_TARGET_PROPERTIES(hello PROPERTIES CLEAN_DIRECT_OUTPUT 1) SET_TARGET_PROPERTIES(hello_static PROPERTIES CLEAN_DIRECT_OUTPUT 1) INSTALL(TARGETS hello hello_static LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) INSTALL(FILES hello.h DESTINATION include/hello)
4)进入build路径,依次输入
①cmake -DCMAKE_INSTALL_PREFIX=/usr ..
②make
③make install
2.使用安装上传的库和头文件
1)在新的项目中建立src目录,编写源文件main.c,和CMakeLists.txt
①main.c
#include <hello.h> int main() { HelloFunc(); return 0; }
②CMakeLists.txt
INCLUDE_DIRECTORIES(/usr/include/hello)
TARGET_LINK_LIBRARIES(main hello)(或者TARGET_LINK_LIBRARIES(main libhello.so))
2)在项目下建立一个build目录,在命令行进入build进行构建
①cmake ..
②make
3.特殊的环境变量CMAKE_INCLUDE_PATH和CMAKE_LIBRARY_PATH
1)为什么需要需这两个环境变量:为了更加智能的使用我们自己写的动态库和头文件
2)如何使用?(在我们前面的例子的基础之上使用)
①在命令行中输入export CMAKE_INCLUDE_PATH=/usr/include/hello
②在src的CMakeLists.txt修改成:
ADD_EXECUTABLE(main main.c) FIND_PATH(myHeader hello.h) IF(myHeader) INCLUDE_DIRECTORIES(${myHeader}) ENDIF(myHeader) TARGET_LINK_LIBRARIES(main libhello.so) LINK_DIRECTORIES(/home/wideking/cmakeDemo/libhello/bulid) ADD_EXECUTABLE(main main.c)
③进行构建
每一章内容都是心血,希望大家不要抄袭~