簡體   English   中英

CMake不鏈接庫文件

[英]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

其次,我建議您將所有字符串都用雙引號引起來,以使其具體化,並避免constantsvariables之間的混淆。 另外,最好添加其他斜杠。 所以,改變

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_DIRCMAKE_CURRENT_SOURCE_DIR時要小心。 以下是CMake Wiki的一些注釋:

CMAKE_CURRENT_SOURCE_DIR這是當前處理的CMakeLists.txt所在的目錄

CMAKE_SOURCE_DIR這是包含頂級CMakeLists.txt的目錄,即頂級源目錄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM