c ++ - CMake - Link mod exe på Windows

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at lave et pluginsystem til min ansøgning, og derfor skal hvert plugin forbinde med min hovedapplikation. Det er fint på Linux og MacOS, da jeg bare kan indstille ENABLE\_EXPORTS-ejendommen til mit eksekverbare mål (set\_target\_properties(${PROJECT\_NAME} PROPERTIES ENABLE\_EXPORTS 1), og plugins vil forbinde helt fint. På Windows, men clang++ råber på mig, at det ikke kan finde libws2editor.dll.a.


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


Når man kigger over CMake-dokumenterne, står det 'For DLL-platforme oprettes et importbibliotek for de eksporterede symboler og bruges til at forbinde.' - Denne importbiblioteksfil (formodentlig .dll.a) synes aldrig at blive oprettet.


Så hvordan kan jeg få CMake'en til at bygge på Windows for at oprette denne fil eller på anden måde link til en eksekverbar?

Bedste reference


Det ser ud til, at jeg kan bruge ar til at generere .a filen for mig, uanset generator - plugins synes at forbinde og indlæse lige fint, når du gør dette. Fantastisk! :)


 
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)