最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

世界播报:cmake-4

来源:博客园

cmake-4学习,参考

  • cmake构建c++项目快速入门2-1


    (资料图片仅供参考)

  • cmake构建c++项目快速入门2-2

了解

  • cmake的工作原理:
  • Windows下用cmake编译cmake

(1)先下载cmake(exe)

(2)编译源码文件

# -S表示源文件夹下;-B表示新建一个文件夹build,并将编译结果放在该文件build:【生成】cmake -S . -B build  # -G 使用nmake,指定编译工具cmake -S . -B build -G "NMake Makefiles"  # 生成Xcode执行的文件,cmake -S . -B xcode -G "Xcode"  # 直接打开xcode项目cmake --open xcode  # --build 执行编译(位置)和make功能一样:【编译】cmake --build build # -j:支持多线程编译和和make一样cmake --build build -j8  # --config 指定编译方式:Release或者Debugcmake --build build --config Release# --install 指定安装位置cmake --install build

动态库和静态库

  • 静态库:编译后的二进制代码,类似.o【编译时链接】

.lib文件:windows

.a文件:linux

举例:linux生成静态库

// xlog.h#ifndef XLOG#define XLOGclass xlog{public:    xlog();};#endif// xlog.cpp#include "xlog.h"#include using namespace std;xlog::xlog(){    cout << "print xlog" << endl;}# CMakeLists.txtcmake_minimum_required(VERSION 3.20)project(xlog)# STATIC:表示生成静态库add_library(xlog STATIC xlog.cpp xlog.h)

然后执行:

# 生成cmake -S . -B build# 编译cmake --build build

举例:链接静态库

在test_xlog/test_xlog.cpp中链接libxlog.a库

// test_xlog.cpp#include #include "xlog.h"using namespace std;int main(){    xlog log;    cout << "test_xlog" << endl;    return 0;}# CMakeLists.txtcmake_minimum_required(VERSION 3.20)project(test_xlog)#指定头文件查找路径include_directories("../xlog")#指定库查找路径link_directories("../xlog/build")add_executable(test_xlog test_xlog.cpp)#指定加载的库【静态库:libxlog.a】target_link_libraries(test_xlog xlog)
  • 动态库: 【运行时链接】

.lib文件(函数地址索引)和.dll文件(函数二进制代码):windows

.so文件:linux

.dylib:macOS

举例:生成动态库并链接使用

# CMakeLists.txtcmake_minimum_required(VERSION 3.20)project(xlog)include_directories("xlog")# 编译生成动态库add_library(xlog SHARED xlog/xlog.cpp)add_executable(test_xlog test_xlog/test_xlog.cpp)target_link_libraries(test_xlog xlog)

注意:在windows中生成链接动态库时,需要设置一下才能同时生成:.dll和.lib文件,下面是兼容各平台的代码:

// xlog.h#ifndef XLOG#define XLOG#ifndef _WIN32    #define XCPP_API#else    #ifdef xlog_EXPORTS        #define XCPP_API __declspect(dllexport) //库项目调用    #else        #define XCPP_API __declspect(dllimport) //调用库项目调用    #endif#endifclass XCPP_API xlog{public:    xlog();};#endif

关键词: 二进制代码 工作原理 直接打开