[英]CMake not linking library files
我有一個批處理腳本,運行時將僅調用cmake命令來構建Visual Studio C ++項目。 但是,該項目應該有兩個靜態庫的兩個引用...但是,無論我如何嘗試,我似乎都無法使我的項目正確鏈接庫。 這是我的文件夾結構的外觀:
.
+-- build
| +-- x64
| +-- DebugStatic
| +-- mylibA_static.lib
| +-- mylibB_static.lib
+-- Include
+-- Source
+-- myproject
| +-- Demo
| +-- build
| +-- cmake
| +-- GenerateVS2015.bat
| +-- CMakeLists.txt
| +-- Demo.cpp
| +-- stdafx.cpp
現在,我從Demo項目文件夾結構內的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不會構建名為Demo.vcproj ...的Visual Studio C ++項目,並且在該項目文件中將鏈接兩個引用內的名為mylibA_static.lib和mylibB_static.lib的庫。 但是,當我嘗試這種方法時,我從沒有得到任何形式的鏈接庫。
首先,在批處理腳本中,您僅生成了makefile,但實際上並未構建該庫。 因此,我建議您在cmake
之后和cd
之前添加行make
。
其次,我建議您將所有字符串都用雙引號引起來,以使其具體化,並避免constants
和variables
之間的混淆。 另外,最好添加其他斜杠。 所以,改變
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)
至
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_SOURCE_DIR
和CMAKE_CURRENT_SOURCE_DIR
時要小心。 以下是CMake Wiki的一些注釋:
CMAKE_CURRENT_SOURCE_DIR這是當前處理的CMakeLists.txt所在的目錄
CMAKE_SOURCE_DIR這是包含頂級CMakeLists.txt的目錄,即頂級源目錄
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.