静态库与动态库构建以及使用

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)

③进行构建

猜你喜欢

转载自www.cnblogs.com/lpd1/p/9009418.html