【WIN32】CMake的学习总结 5——编译完整的动/静态库
来源:互联网 发布:hantaioppai新域名 编辑:程序博客网 时间:2024/05/16 14:33
目录结构
+|+--- CMakeLists.txt+--+ bin+--+ lib+--+ src| +--- test.cpp| +--- CMakeLists.txt+--+ xmath| +--- xmath.h| +--- xmath.cpp| +--- xmath.def| +--- CMakeLists.txt+--+ build
以下为C++的源代码
子目录xmath:xmath/xmath.h 代码如下:
#ifndef XMATH_H#define XMATH_Hdouble addition(double v1, double v2);double multiple(double v1, double v2);#endif // XMATH_H
子目录xmath:xmath/xmath.cpp 代码如下:
#include "xmath.h"double addition(double v1, double v2){ return v1 + v2;}double multiple(double v1, double v2){ return v1 * v2;}
子目录xmath:xmath/xmath.def 代码如下:
LIBRARY "libxmath"EXPORTS addition multiple
子目录src:src/test.cpp代码如下:
#include <stdio.h>#include <stdlib.h>#include <iostream>#include <xmath.h>int main(int argc, char **argv){ if(argc < 3){ fprintf(stdout, "%s输入的参数不足2个,程序终止!", argv[0]); return 1; } double val1 = addition(atof(argv[1]), atof(argv[2])); double val2 = multiple(atof(argv[1]), atof(argv[2])); fprintf(stdout, "addition(%s, %s) is %g\n", argv[1], argv[2], val1); fprintf(stdout, "multiple(%s, %s) is %g\n", argv[1], argv[2], val2); return 0;}
C++源代码完成后,将在CMakeLists.txt中编写CMake的命令
主目录: CMakeLists.txt
########################################## Project(关于工程信息)#########################################cmake_minimum_required(VERSION 3.0)project(XMath) # 添加工程名称(默认为Project)add_subdirectory(xmathlib) # 添加库的子目录add_subdirectory(src) # 添加测试的子目录
子目录xmath: xmath/CMakeLists.txt
set (major_version 1)set (minor_version 0)set (patch_version 0)set (build_version 0)set (version ${major_version}.${minor_version}.${patch_version})########################################## Source(关于源文件)#########################################set(file_inc xmath.h) # 头文件set(file_src xmath.cpp) # 源文件set(lib_name "xmath") # 库名称set(lib_name_static ${lib_name}-static) # 静态库的名称set(lib_name_shared ${lib_name}-shared) # 动态库的名称# WIN32下添加def文件if(WIN32)set(file_src ${file_src} xmath.def) # 源文件添加xmath.defendif()########################################## Target(关于目标文件)########################################## 添加静态库add_library(${lib_name_static} # 静态库名称 STATIC # 静态库FLAG ${file_inc} ${file_src} # 库的源文件 ) # 添加动态库add_library(${lib_name_shared} # 动态库名称 SHARED # 动态库标识 ${file_inc} ${file_src} # 源文件 )# WIN32平台添加前缀lib(UNIX为默认lib前缀的)if(WIN32)set(lib_name lib${lib_name}) # 添加前缀libendif()# 设置静态库的属性set_target_properties(${lib_name_static} PROPERTIES OUTPUT_NAME_DEBUG ${lib_name}d # DEBUG下生成的库名称libxmathd.lib OUTPUT_NAME ${lib_name} # 非DEBUG生成的库名称libxmath.lib )# 设置动态库的属性set_target_properties(${lib_name_shared} PROPERTIES OUTPUT_NAME ${lib_name} # 重名命生成的库名称libxmath.lib SOVERSION ${major_version} # 设置函数API版本 VERSION ${version} # 设置动态库版本 )# 设置库的输出路径set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
子目录src: src/CMakeLists.txt
########################################## Build(关于依赖库)#########################################set(dir_src test.cpp)set(exe_name test)# xmath库头文件所在目录set(lib_inc ${PROJECT_SOURCE_DIR}/xmathlib CACHE PATH "include of xmath")# xmath库文件所在目录set(lib_dir ${PROJECT_SOURCE_DIR}/lib CACHE PATH "directory of math.lib")# 在这里动态库与静态库的设置是一样的# 指定头文件的搜索路径include_directories(${lib_inc})# 指定库文件的搜索路径link_directories(${lib_dir})########################################## Target(关于目标文件)########################################## 添加可执行文件Testadd_executable(${exe_name} ${dir_src})# 设置可执行文件输出目录set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)# 简单使用动态库与静态库,全场唯一的不同就在这里# 链接库(动态库)target_link_libraries(${exe_name} libxmath.dll)# 链接库(静态库)# target_link_libraries(${exe_name} libxmath.lib)
0 0
- 【WIN32】CMake的学习总结 5——编译完整的动/静态库
- 【WIN32】CMake的学习总结 2——静态库
- 【WIN32】CMake的学习总结 3——动态库
- 【WIN32】CMake的学习总结 4——深入动态库
- 【WIN32】CMake的学习总结 1——一个简单的Hello World程序
- VS2008的动、静态编译
- VS2008的动、静态编译
- VS2008的动、静态编译
- CMake 实例学习(五) 动/静态库共存
- 用cmake 编译 xcode用的clucene静态库(一)
- 用cmake 编译 xcode用的clucene静态库(二)
- 用cmake 编译 xcode用的clucene静态库(三)
- 使用CMake编译freeglut-3.0.0的静态库
- (转)VS2008的动、静态编译
- CMake学习笔记(3)——编译静态库和动态库
- 动静态库的生成
- linux 的动静态库
- 动、静态库编译顺序
- Linux内核的netpoll框架与netconsole
- 关于scanf和printf格式符中使用*
- 查看MySQL索引
- leetcode_Reverse Linked List
- Android酷炫实用的开源框架(UI框架)(转载,只为保存)
- 【WIN32】CMake的学习总结 5——编译完整的动/静态库
- 【当你以备课的心态去学习,没有你搞不懂的内容】首篇
- linux虚拟机中共享目录下解压失败的原因和解决方法
- 第11周-继承与派生-项目1-是春哥啊
- Ubuntu下qemu的安装
- 注意DefaultMutableTreeNode的add方法
- 黑马程序员——IOS基础(流程控制)
- 图像特征之LBP
- Struts2 - 处理一个form多个submit