CMake - 在Windows上链接exe

时间:2018-05-13 01:15:33

标签: c++ windows build cmake linker

我正在尝试为我的应用程序创建一个插件系统,因此每个插件都需要与我的主应用程序链接。这在Linux和macOS上很好,因为我可以设置我的可执行目标(set_target_properties(${PROJECT_NAME} PROPERTIES ENABLE_EXPORTS 1)的ENABLE_EXPORTS属性,插件将链接正常。然而,在Windows上,clang++对我说它无法找到libws2editor.dll.a

clang++.exe: error: no such file or directory: 'ws2editor/libws2editor.dll.a'

查看CMake文档后,它会说“对于DLL平台,将为导出的符号创建导入库,然后用于链接。” - 这个导入库文件(可能是.dll.a)似乎从未创建过。

那么如何在Windows上创建CMake构建此文件,或以其他方式链接可执行文件?

1 个答案:

答案 0 :(得分:0)

看起来我可以使用ar为我生成.a文件,无论生成器如何 - 插件似乎链接并在执行此操作时加载正常。真棒! :)

 
if(WIN32)
    #Invoke ar to generate a .dll.a from the .obj files, required to link plugins
    add_custom_command(TARGET ${PROJECT_NAME} PRE_LINK
        COMMAND sh -c "${CMAKE_AR} cr lib${PROJECT_NAME}.dll.a $$(find . -name '*.obj' -printf '%p ')"
        COMMENT "Generating lib${PROJECT_NAME}.dll.a for external linking"
        )

    #Also add the install command for libws2editor.dll.a
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${PROJECT_NAME}.dll.a DESTINATION bin)
endif(WIN32)