Windows下Cmake與VS聯合制作dll

峻峰飛陽發表於2019-04-08

接觸大的專案,鋪天蓋地的程式碼總是會掩蓋了開發環境和工具的本質,上手之前,跑跑小的歷程有助於對專案的理解,提高效率。

  • 首先記錄一下 dll(動態連結庫)的生成過程: 
    建立資料夾
Execise_CmakeDLLgitGtest

建立兩個子資料夾和文字檔案

build lib 
CmakeLists.txt

CmakeLists.txt如下:

PROJECT(ALULIB)
ADD_SUBDIRECTORY(lib)

build是cmake的執行目錄,會在其中生成執行cmake指令後的一些檔案,執行之前是空的。 
lib下存放準備生成dll的原始檔和檔案以及自己的CmakeLists.txt,分別如下:

//ALU.cpp

#include "ALU.h"

int main()
{
    ALU alu1(4, 2);
    int get_add, get_sub, get_mul, get_div;
    get_add = alu1.add();
    get_sub = alu1.sub();
    get_mul = alu1.mul();
    get_div = alu1.div();
    cout << get_add << endl;
    cout << get_sub << endl;
    cout << get_mul << endl;
    cout << get_div << endl;
    system("Pause");
    return 0;
}
//ALU.h

#pragma once
#define DllExport   __declspec( dllexport )//巨集定義
#ifndef ALU_H 
#define ALU_H 
#include <iostream> 
using namespace std;
class DllExport ALU //要生成dll必須加上這個巨集,否則會出錯,這也是我求教得到的,之前也不懂,特此指出注意一下,同時致謝!
{
public:
    ALU(int opr_a, int opr_b)
    {
        a = opr_a;
        b = opr_b;
    };
    ~ALU() {};
    int add();
    int sub();
    int mul();
    int div();
private:
    int a;
    int b;
};

#endif

 

# CmakeLists.txt

SET(LIBALU_SRC ALU.cpp)
ADD_LIBRARY(ALU SHARED ${LIBALU_SRC}) #想得到動態庫,引數就是SHARED

檔案都準備好之後,在 cmd 中進入build資料夾下,執行

cmake . .

其中“. .”的意思是在其父目錄執行cmake,正好是主資料夾下。

在build中生成了ALULIB.sln 
這個檔案就是要用到的檔案,現在該visual studio 2015登場了! 
直接雙擊開啟sln檔案,會直接在VS中啟動。

右鍵ALL_BUILD,選擇build,開始編譯整個工程。 
之後在build生成若干新的資料夾,也有一個lib,進入這個lib,Debug,發現了一個dll和lib。這裡需要說明,即使是生成dll動態連結庫檔案,也會同時產生一個lib靜態連線庫檔案,這個比專門生成靜態連線庫的lib要小。此處的lib是作為dll的入口的意思。 
到此為止,DLL就製作完成了!
 

相關文章