Ich habe ein Batch-Skript, das beim Ausführen einfach einen Cmake-Befehl aufruft, um ein Visual Studio C++ - Projekt zu erstellen. Dieses Projekt sollte jedoch zwei Verweise auf zwei statische Bibliotheken haben ... Trotzdem, egal was ich versuche, kann ich mein Projekt nicht dazu bringen, die Bibliotheken korrekt zu verknüpfen. Hier ist, wie meine Ordnerstruktur aussieht:CMake verbindet keine Bibliotheksdateien
.
+-- build
| +-- x64
| +-- DebugStatic
| +-- mylibA_static.lib
| +-- mylibB_static.lib
+-- Include
+-- Source
+-- myproject
| +-- Demo
| +-- build
| +-- cmake
| +-- GenerateVS2015.bat
| +-- CMakeLists.txt
| +-- Demo.cpp
| +-- stdafx.cpp
Nun, ich bin mit dem Batch-Skript aus dem Cmake Ordner in der Ordnerstruktur Demo-Projektes. Mein Stapel Skript ist wie folgt:
@echo off
set startingDir=%CD%
set basepath=%~dp0
set builddir=%basepath%\..\build
if not exist %builddir% (mkdir %builddir%)
cd %builddir%
cmake -G "Visual Studio 14 2015 Win64" .. %*
cd %startingDir%
Nichts zu kompliziert. Nun schauen wir uns die Datei CMakeLists.txt aussehen:
cmake_minimum_required (VERSION 2.8)
PROJECT (Demo)
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
# using Visual Studio C++
add_definitions(-DBUILD_DLL)
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} xmllite.lib")
string(REGEX REPLACE "/bin/[^/]*$" "" VCINSTALLDIR "${CMAKE_C_COMPILER}")
message(STATUS "Guessed MSVC directory: ${VCINSTALLDIR}")
endif()
SET(SRCS
Demo.cpp
stdafx.cpp
)
ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS})
TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PUBLIC ../../Include)
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}../../build/x64/DebugStatic/mylibA_static.lib ${CMAKE_CURRENT_SOURCE_DIR}../../build/x64/DebugStatic/mylibB_static.lib)
diese Logik verwenden, würde nicht CMake ein Visual Studio C++ Projekt bauen genannt Demo.vcproj ... und innerhalb dieser Projektdatei würde verknüpft zwei Bibliotheken mylibA_static genannt .lib und mylibB_static.lib innerhalb der Referenzen. Wenn ich dies jedoch versuche, bekomme ich nie irgendeine Art von verknüpfter Bibliothek.
Haben Sie dieses generierte Projekt erstellt? Das von Ihnen bereitgestellte Skript generiert es nur. – arrowd
Was meinst du? Habe ich mylibA_static.lib und mylibB_static.lib erstellt? Ja, ich habe auch den Quellcode für diese Bibliotheken ... aber ich dachte, da ich die kompilierten Bibliotheken bereits als .lib-Dateien habe ... Ich dachte, es wäre viel einfacher, wenn ich diese einfach in das Demo-Projekt einbinden könnte. Ist das möglich? Oder sagst du, ich sollte das Demo-Projekt "bauen"? Wenn ja, wie mache ich das mit CMake? Denn wenn ich das generierte .vcproj-Demoprojekt öffne, sehe ich keine Bibliotheken, die im Projekt verlinkt sind. – andyopayne
Der Versuch, das generierte Demo-Projekt zu erstellen, schlägt fehl. Es sagt nicht unbedingt, warum es scheitert, aber ich weiß, dass es die Bibliotheken im Verweisebereich des Projekts verlinken sollte ... und diese sind nicht vorhanden, also stelle ich mir vor, dass die Bibliotheken richtig verlinkt sind. – andyopayne