我有一個批處理腳本,運行時只需調用cmake命令來構建Visual Studio C++項目。然而,該項目應該有兩個引用兩個靜態庫...但是,無論我嘗試什麼,我似乎無法讓我的項目正確鏈接庫。這裏是我的文件夾結構的外觀:CMake沒有鏈接庫文件
.
+-- build
| +-- x64
| +-- DebugStatic
| +-- mylibA_static.lib
| +-- mylibB_static.lib
+-- Include
+-- Source
+-- myproject
| +-- Demo
| +-- build
| +-- cmake
| +-- GenerateVS2015.bat
| +-- CMakeLists.txt
| +-- Demo.cpp
| +-- stdafx.cpp
現在,我從演示項目文件夾結構中的cmake的文件夾中運行批處理腳本。我的批處理腳本如下:
@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%
沒什麼太複雜的。現在,讓我們來看看的CMakeLists.txt文件:
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)
使用這個邏輯,豈不CMake的構建一個Visual Studio C++項目稱爲Demo.vcproj ......和項目文件中會鏈接兩個庫稱爲mylibA_static .lib和mylibB_static.lib在引用中。然而,當我嘗試這個時,我從來沒有得到任何類型的鏈接庫。
您是否構建了生成的項目?您提供的腳本僅生成它。 – arrowd
你是什麼意思?我建立了mylibA_static.lib和mylibB_static.lib嗎?是的,我也有這些庫的源代碼...但是我想,因爲我已經將編譯過的庫作爲.lib文件了......我想如果我可以簡單地將這些文件鏈接到Demo項目中,情況會更加簡單。那可能嗎?還是你說我應該'建立'Demo項目?如果是這樣,我該如何使用CMake來做到這一點?因爲當我打開生成的.vcproj演示項目時,我看不到任何項目中鏈接的庫。 – andyopayne
試圖構建生成的演示項目失敗。它不一定說它爲什麼會失敗,但我知道它應該鏈接項目的引用部分中的庫......並且這些庫不存在,所以我想這是因爲這些庫已正確鏈接。 – andyopayne