编译静态,动态库
文件目录结构
文件内容
hello.h
#ifndef HELLO
#define HELLO
void HelloFunc();
#endif
hello.cpp
#include "hello.h"
#include<iostream>
void HelloFunc()
{
std::cout<<"hello,world"<<std::endl;
}
cmake02/CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
PROJECT(MAIN)
ADD_SUBDIRECTORY(lib bin)
cmake02/lib/CMakeLists.txt
SET(LIBHELLO_SRC hello.cpp)
#构建动态库/静态库
ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})
ADD_LIBRARY(hello_static STATIC ${LIBHELLO_SRC})
SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello")
#安装头文件
INSTALL(FILES hello.h DESTINATION include/hello)
#安装静态库和动态库,注意lib都为相对路径,动态库需要安装在lib64下面
#安装的时候指定路径,放到系统下 cmake -D CMAKE_INSTALL_PREFIX=/usr ..
INSTALL(TARGETS hello hello_static LIBRARY DESTINATION lib64 ARCHIVE DESTINATION lib)
#最后make install进行静态库和动态库的安装
#使用外部共享库和头文件
外部构建生成库文件
cd build
cmake -D CMAKE_INSTALL_PREFIX=/usr … 指定安装路径
make
make install:可以看到动态库(/usr/lib64)和静态库(usr/lib),以及头文件都安装
使用外部共享库
接下来我们使用刚编译的静态以及动态库
文件目录结构
文件内容
cmake03/CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
PROJECT(MAIN)
ADD_SUBDIRECTORY(src bin)
src/CMakeLists.txt
#include头文件所在位置
INCLUDE_DIRECTORIES(/usr/include/hello)
ADD_EXECUTABLE(main main.cpp)
# TARGET_LINK_LIBRARIES:只需要给出动态链接库的名字就行了
#前提:libhello.so需要在系统环境变量中的
#链接动态库
TARGET_LINK_LIBRARIES(main libhello.so)
#链接静态库
#TARGET_LINK_LIBRARIES(main libhello.a)
#生成可调试的版本 cmake .. -DCMAKE_BUILD_TYPE=debug
src/main.cpp
#include<hello.h>
int main()
{
HelloFunc();
}
外部构建与运行
cd build
cmake … -DCMAKE_BUILD_TYPE=debug 生成可调试的版本
make
cd bin/
./main