【问题标题】:Errors setting up CMake and vcpkg on windows `Can't open include file`在 Windows 上设置 CMake 和 vcpkg 时出错`无法打开包含文件`
【发布时间】:2020-02-07 16:07:09
【问题描述】:

我一直在尝试关注vcpkg setup guide,但我无法解决我在最后一步遇到的构建错误:

fatal error C1083: Cannot open include file: 'sqlite3.h': No such file or directory

我的vcpkg设置过程如下:

  • > git clone https://github.com/Microsoft/vcpkg.git
  • > cd vcpkg\
  • > .\bootstrap-vcpkg.bat
  • > vcpkg install sqlite3:x64-windows
  • > vcpkg integrate install

我确认 sqlite 安装:

> vcpkg list

sqlite3:x64-windows                 3.29.0-1         SQLite is a software library that implements a s...

我在测试存储库中创建了以下文件:

CMakeLists.txt:

cmake_minimum_required(VERSION 3.0)
project(test)

find_package(Sqlite3 REQUIRED)

add_executable(main main.cpp)
target_link_libraries(main sqlite3)

main.cpp:

#include <sqlite3.h>
#include <stdio.h>

int main()
{
    printf("%s\n", sqlite3_libversion());
    return 0;
}

开始构建:

然后我通过在构建文件夹中运行以下命令来生成构建文件,并注意它能够找到SQLite3

> cmake .. -DCMAKE_TOOLCHAIN_FILE=C:/Workspace/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows

-- Building for: Visual Studio 16 2019
-- Using toolchain file: C:/Workspace/vcpkg/scripts/buildsystems/vcpkg.cmake
-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.15063.
-- The C compiler identification is MSVC 19.23.28106.4
-- The CXX compiler identification is MSVC 19.23.28106.4
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Professional/VC/Tools/MSVC/14.23.28105/bin/Hostx64/x64/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Professional/VC/Tools/MSVC/14.23.28105/bin/Hostx64/x64/cl.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Professional/VC/Tools/MSVC/14.23.28105/bin/Hostx64/x64/cl.exe
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Professional/VC/Tools/MSVC/14.23.28105/bin/Hostx64/x64/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found SQLite3: C:/Workspace/vcpkg/installed/x64-windows/include (found version "3.29.0")
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Workspace/testCmake/build

最后,我触发了构建,但失败了:

> cmake --build .

Microsoft (R) Build Engine version 16.3.1+1def00d3d for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.

  Checking Build System
  Building Custom Rule C:/Workspace/testCmake/CMakeLists.txt
  main.cpp
C:\Workspace\testCmake\main.cpp(1,10): fatal error C1083: Cannot open include file: 'sqlite3.h': No such file or directory [C:\Workspace\testCmake\build\main.vcxproj]

【问题讨论】:

    标签: c++ sqlite cmake vcpkg


    【解决方案1】:

    虽然您提供 SQLite3 库以与 target_link_libraries() 链接,但您需要让您的可执行文件知道在哪里可以找到头文件。使用target_include_directories():

    cmake_minimum_required(VERSION 3.0)
    project(test)
    
    find_package(Sqlite3 REQUIRED)
    
    add_executable(main main.cpp)
    
    # Add this line after the target is defined.
    target_include_directories(main PRIVATE ${SQLite3_INCLUDE_DIRS})
    
    target_link_libraries(main sqlite3)
    

    如果找到 SQLite3(看起来就是这样),CMake 将填充这些变量:

    • SQLite3_INCLUDE_DIRS:在哪里可以找到 sqlite3.h 等。
    • SQLite3_LIBRARIES: 链接到使用 SQLite3 的库。
    • SQLite3_VERSION: 找到 SQLite3 库的版本
    • SQLite3_FOUND: TRUE 如果找到

    因此,如果您对target_link_libraries() 的调用未按预期工作,请尝试使用${SQLite3_LIBRARIES} 而不是sqlite3

    【讨论】:

    • 你已经结束了几个小时的挫折,谢谢!它与${SQLite3_LIBRARIES} 合作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 2016-05-11
    相关资源
    最近更新 更多