CMake无法找到调试库

时间:2016-10-13 19:38:10

标签: cmake visual-studio-2015

我是一个CMake noob试图组装一个软件包安装程序,这样我就可以在我的Windows开发机器和我的集群之间移动。

我的文件有一个以下目录树(例子)

    -Primary
       --Library Source
          --CMakeLists.txt
          --src1.cpp
          --src1.h
       --Application Source
          --CMakeLists.txt
          --src1.cpp
          --src1.h
       --CMakeLists.txt

每个CMakeLists.txt都是 初级/的CMakeLists.txt

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(BloodVesselRadiationDamageSimulations CXX)

SET(FIND_LIBRARY_USE_LIB64_PATHS true)
SET(CMAKE_INSTALL_PREFIX  ${CMAKE_SOURCE_DIR}) #only for testing
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_ROOT}/ ${CMAKE_SOURCE_DIR}/cmake/Modules/")

FIND_PACKAGE(OpenMP)
FIND_PACKAGE(MPI)
FIND_PACKAGE(HDF5)
FIND_PACKAGE(GTest)

set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")

SET(CMAKE_DEBUG_POSTFIX _d)
ADD_SUBDIRECTORY(Source)
ADD_SUBDIRECTORY(SourceUnitTest)

图书馆资源/ CMakeLists.txt

ADD_LIBRARY(VesselProjectBaseLibrary STATIC Src1.cpp 
                                            Src1.h) 
INSTALL(TARGETS VesselProjectBaseLibrary DESTINATION x64/Debug CONFIGURATIONS Debug)
INSTALL(TARGETS VesselProjectBaseLibrary DESTINATION x64/Release CONFIGURATIONS Release|RelWithDebInfo)

Application Source / CMakeLists.txt

INCLUDE_DIRECTORIES("${GTEST_INCLUDE_DIRS}")
ADD_EXECUTABLE (SourceUnitTests Src1.cpp
                                Src1.h)

TARGET_LINK_LIBRARIES(SourceUnitTests ${GTEST_LIBRARY})
TARGET_LINK_LIBRARIES(SourceUnitTests debug VesselProjectBaseLibrary_d optimized VesselProjectBaseLibrary)

我能够正确地生成项目;我在项目中看到了所有正确的文件。但是,当我去编译调试版本时,我收到以下错误:

1>ipo: : error #11018: Cannot open VesselProjectBaseLibrary_d.lib
1>LINK : fatal error LNK1104: cannot open file 'VesselProjectBaseLibrary_d.lib'

如果我编译我的发布版本,一切都运行良好,编译成功。该库在两个版本下都能成功编译。

1 个答案:

答案 0 :(得分:1)

当您链接到项目中创建的库时,您需要指定库目标名称,而不是库文件。 CMake会关心正确的文件名,路径和其他内容:

TARGET_LINK_LIBRARIES(SourceUnitTests VesselProjectBaseLibrary)

变量CMAKE_DEBUG_POSTFIX会影响库的文件名。虽然文件VesselProjectBaseLibrary_d.lib实际上是在调试版本中创建的,但链接器无法自动找到它。再次,使用目标名称,让CMake完成所有其他工作。