静态库与动态库构建以及使用
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)
③进行构建
每一章内容都是心血,希望大家不要抄袭~

浙公网安备 33010602011771号