2017-12-08 9 views
1

Ich habe eine Frage ähnlich wie this one. Ich versuche eine DLL für Windows ähnlich wie Visual Studio zu kompilieren, außer mit CLion und CMake. Ich habe versucht, die Antwort in der Frage, sowie die Schritte gezeigt here, aber ich bekomme immer noch einen Fehler beim injizieren.Build Windows DllMain DLL mit CMake

Mein dll-Code ist sehr einfach, eine ähnliche DLL in Visual Studio kompilierte funktioniert:

#include <windows.h> 
#include <iostream> 
using namespace std; 

void hello() { 
    AllocConsole(); 
    freopen("CONOUT$", "w", stdout); 
    cout << "Hello, World!" << endl; 
} 

bool __stdcall DllMain(HMODULE /*module*/, DWORD reason, LPVOID /*reserved*/) { 
    if (reason == DLL_PROCESS_ATTACH) hello(); 
    return true; 
} 

Auch hier ist das, was ich in CMakeLists.txt versucht: Sorry, es gibt einen Raum zwischen PROJECT_NAME und MODULE sein sollte

cmake_minimum_required(VERSION 3.9) 
project(PROJECT_NAME) 
include (GenerateExportHeader) 
set(CMAKE_CXX_STANDARD 17) 

add_library(PROJECT_NAME MODULE main.cpp) 
set_target_properties(PROJECT_NAME PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32") 
GENERATE_EXPORT_HEADER(PROJECT_NAME 
    BASE_NAME PROJECT_NAME 
    EXPORT_MACRO_NAME PROJECT_NAME_EXPORT 
    EXPORT_FILE_NAME PROJECT_NAME_Export.h 
    STATIC_DEFINE PROJECT_NAME_BUILT_AS_STATIC) 
+0

Versuchen Sie, Ihre add_library Anruf GEMEINSAM hinzufügen, das heißt 'add_library (PROJECT_NAMEMODULE GEMEINSAM main.cpp)', weil sonst ein statisches Bibliothek ist erstellt. – vre

Antwort

0

Sie haben zwei Möglichkeiten:

  1. Fügen Sie die BUILD_SHARED_LIBS-Variable als booleschen Wert in den CMake-Cache ein und überprüfen Sie sie. Dies wird das Verhalten des Befehls add_library ändern, um eine gemeinsam genutzte Bibliothek zu erstellen, d. H. Eine DLL-Datei unter Windows.
  2. Explizit die Bibliothek erstellen, wie geteilt: add_library(PROJECT_NAMEMODULE SHARED main.cpp)

BUILD_SHARED_LIBS variable Dokumentation: https://cmake.org/cmake/help/v3.10/variable/BUILD_SHARED_LIBS.html