Ошибки при настройке CMake и vcpkg на окнах `Не могу открыть включаемый файл` - PullRequest
0 голосов
/ 10 октября 2019

Я пытался следовать руководству по настройке vcpkg , но мне не удалось устранить ошибку сборки, которую я получил на последнем шаге:

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

Мой процесс установки vcpkg выглядит следующим образом:

Я подтверждаю установку 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]

1 Ответ

1 голос
/ 10 октября 2019

Пока вы предоставляете библиотеку 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)

CMake заполняет эти переменные, если найден SQLite3 (который выглядит так):

  • SQLite3_INCLUDE_DIRS: где найти sqlite3.h и т. д.
  • SQLite3_LIBRARIES: библиотеки, с которыми нужно ссылаться для использования SQLite3.
  • SQLite3_VERSION: найдена версия библиотеки SQLite3
  • SQLite3_FOUND: TRUE если найдено

Так что, если ваш вызов на target_link_libraries() не работает должным образом, попробуйте использовать ${SQLite3_LIBRARIES} вместо sqlite3.

...