【问题标题】:CMake is not able to link to vcpkg libraryCMake 无法链接到 vcpkg 库
【发布时间】:2019-06-25 07:38:58
【问题描述】:

我在 vcpkg 中安装了一个新库,即ITK,现在我正在尝试编译其指南中提供的第一个代码示例,我通过 vcpkg 安装了它,所以我跳过了安装部分(在该指南中提供)并立即在 Visual Studio 中创建了一个新的 cmake 项目。

+ ItkProjects
    - ItkProjects
        - main.cpp
        - CMakeLists.txt  #1
    - CMakeLists.txt   #2

CMakeLists.txt #2

cmake_minimum_required (VERSION 3.8)

project ("ItkProjects")

# Include sub-projects.
add_subdirectory ("ItkProjects")

CMakeLists.txt #1

cmake_minimum_required (VERSION 3.8)

find_package(ITK CONFIG REQUIRED)

include_directories(${ITK_INCLUDE_DIRS})

add_executable (ItkProjects "main.cpp")

target_link_libraries(ItkProjects ${ITK_LIBRARIES})

main.cpp

#include "itkImage.h"

using namespace std;

int main()
{
    using ImageType = itk::Image<unsigned char, 3>;

    ImageType::Pointer image = ImageType::New();

    return EXIT_SUCCESS;
}

CMake 配置和生成时没有错误,但在编译时出现此错误:

ninja:错误:'/lib/double-conversion.lib',需要 'ItkProjects/ItkProjects.exe',缺失且没有已知的规则来制作它

我确定该文件存在于D:\vcpkg\installed\x64-windows\lib(我的安装路径)中,但我不确定为什么ninja 无法链接到它。请任何帮助..

【问题讨论】:

  • 注意/lib/double-conversion.lib 中的前导/:这意味着ninja 会准确搜索此absolute 路径,而无需在其前面添加任何内容。可能是 ITK 的 vcpkg 包有问题。
  • 在github中发现一个问题github.com/microsoft/vcpkg/issues/6975
  • 我今天正在使用 ITK + vcpkg + Visual Studio 解决同样的错误。

标签: c++ cmake itk vcpkg


【解决方案1】:

您是否尝试过使用 vcpkg cmake-tool 运行 cmake,例如:

cmake CMakeLists.txt "-DCMAKE_TOOLCHAIN_FILE=D:\src\vcpkg\scripts\buildsystems\vcpkg.cmake"

如果我理解了这个权利,这将保留添加正确的文件夹名称。刚刚在这里找到:using vcpkg with cmake

【讨论】:

  • 我按照建议的 vcpkg 目标对其进行了更改,它变得有点有趣,因为在使用 Visual Studio cmake 配置时它会给出许多 undefined external symbol 错误,但是当我使用 cmake-gui 时它编译得很好配置。
【解决方案2】:

找到“vcpkg/scripts/buildsystems/vcpkg.cmake”文件。搜索“VS_GLOBAL_VcpkgEnabled”并将属性从 false 更改为 true。

【讨论】: