Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用CMake构建Windows DllMain DLL_Cmake_Clion - Fatal编程技术网

使用CMake构建Windows DllMain DLL

使用CMake构建Windows DllMain DLL,cmake,clion,Cmake,Clion,我有一个类似的问题。我正在尝试为windows编译一个类似于VisualStudio的DLL,除了CLion和CMake。我已经尝试了问题中的答案,以及所示的步骤,但在注射过程中仍然出现错误 我的dll代码非常简单,在visual studio中编译的类似dll工作正常: #include <windows.h> #include <iostream> using namespace std; void hello() { AllocConsole();

我有一个类似的问题。我正在尝试为windows编译一个类似于VisualStudio的DLL,除了CLion和CMake。我已经尝试了问题中的答案,以及所示的步骤,但在注射过程中仍然出现错误

我的dll代码非常简单,在visual studio中编译的类似dll工作正常:

#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;
}
您有两个选择:

  • BUILD\u SHARED\u LIBS
    变量作为布尔值添加到CMake的缓存中,然后检查它。这将修改
    add_library
    命令的行为,以在Windows上创建共享库,即DLL文件
  • 显式创建共享库:
    add\u库(PROJECT\u NAMEMODULE shared main.cpp)

  • BUILD\u SHARED\u LIBS
    variable documentation:

    尝试将SHARED添加到add\u library调用中,即
    add\u library(PROJECT\u NAMEMODULE SHARED main.cpp)
    ,因为否则会创建静态库。
    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)