Aber ich habe den Verdacht, dass meine Bibliotheksbinärdatei einfach über jede andere enthaltene Bibliothek und jede ausführbare Datei kopiert wird. Dies liegt daran, dass die Größen von allem seltsamerweise übereinstimmen, meine ausführbare Datei ist es 8,7 MB und der Code besteht eigentlich nur aus ein paar Zeilen, meine Kernbibliothek ist 8 MB groß.
Ich habe den Abhängigkeitswalker verwendet, um zu überprüfen, ob meine ausführbare Datei nicht mit der Kernbibliotheks-DLL verknüpft ist, d. h Ich habe beide Binärdateien in einem Hex-Editor überprüft und alle Zeichenfolgen aus der kompilierten Quelle der Kernbibliothek wurden in der Binärdatei für die ausführbare Datei angezeigt.
Hier sind meine CMakeLists für die Kernbibliothek:
Code: Select all
add_library(${MR_CORE} SHARED)
target_sources(
${MR_CORE}
PUBLIC
(source files go here)
)
target_link_libraries(${MR_CORE} ${MR_SCRIPT} SDL3::SDL3)
target_compile_definitions(
${MR_CORE}
PUBLIC
MR_BUILDINFO_GAME_NAME="${MR_GAME_NAME}"
)
if(MROPT_DEV)
target_compile_definitions(${MR_CORE} PUBLIC MR_BUILDOPT_DEV=1)
else()
target_compile_definitions(${MR_CORE} PUBLIC MR_BUILDOPT_DEV=0)
endif()
(Ich kompiliere tatsächlich eine Laufzeitbibliothek, die den eigentlichen Code enthält. Die ausführbare Datei ruft init nur wirklich in der Kernbibliothek auf und teilt dann mit die Laufzeitbibliothek, um ihre Aufgabe zu erledigen)
Code: Select all
add_library(${MR_RUNTIME} SHARED)
target_sources(
${MR_RUNTIME}
PUBLIC
source/runtime.cpp
)
target_link_libraries(${MR_RUNTIME} ${MR_CORE})
if(MROPT_DEV)
target_compile_definitions(${MR_RUNTIME} PUBLIC MR_BUILDOPT_DEV=1)
else()
target_compile_definitions(${MR_RUNTIME} PUBLIC MR_BUILDOPT_DEV=0)
endif()
if(WIN32)
add_executable(${MR_GAME_NAME} WIN32 source/main.cpp data/app.rc)
elseif(APPLE)
add_executable(${MR_GAME_NAME} MACOSX_BUNDLE source/main.cpp)
else()
add_executable(${MR_GAME_NAME} source/main.cpp)
endif()
target_link_libraries(${MR_GAME_NAME} PUBLIC ${MR_RUNTIME})
if(MROPT_DEV)
target_compile_definitions(${MR_GAME_NAME} PUBLIC MR_BUILDOPT_DEV=1)
else()
target_compile_definitions(${MR_GAME_NAME} PUBLIC MR_BUILDOPT_DEV=0)
endif()