gpt4 book ai didi

c++ - CMake:target_include_directories() 找不到头文件

转载 作者:搜寻专家 更新时间:2023-10-31 01:32:11 25 4
gpt4 key购买 nike

在我的 main.cpp 的顶部文件,No such file or directory被扔在 #include <sqlite3.h> .

通过 g++ -I"C:\Libraries\64_bit\SQLite3\include\" -L"C:\Libraries\64_bit\SQLite3\bin\" -lsqlite3 main.cpp Class1.cpp Class1.h Class2.cpp Class2.h -o main 手动构建代码不抛出任何错误。

CMake 似乎无法找到 header ,即使我已经明确描述了它在我的文件系统中的位置。根据 target_include_directories() 的文档, 这应该足够了:

Specified include directories may be absolute paths or relative paths. Repeated calls for the same append items in the order called.

为什么是target_include_directories()函数找不到 header ,即使我提供了确切的绝对路径?

我正在 64 位 Windows 10 机器上开发,CLion 设置为使用 MinGW-w64 g++ 进行编译编译器。

  • 我已经下载了 64 位 Windows 预编译二进制文件,sqlite3.dll并将其存储在本地 C:\Libraries\64_bit\SQLite3\bin\ .
  • 为了访问 SQLite C++ 函数,我还下载了 SQLite3 的合并源代码并将所有源文件存储在 C:\Libraries\64_bit\SQLite3\include\ 中。 .

我在 CLion 中构建了我的项目,它本质上是一个用于 CMake 的精美 GUI 包装器。在我的 CMakeLists.txt ,我包含了 SQLite3 的 header 并链接了 sqlite3如下:

cmake_minimum_required(VERSION 3.7)
project(My_Project)

set(CMAKE_CXX_STANDARD 11)

set(INCLUDE_DIRS C:\\Libraries\\64_bit\\SQLite3\\include\\)
set(LIBRARIES sqlite3.dll)
# My project's source code
set(SOURCE_FILES main.cpp Class1.cpp Class1.h Class2.cpp Class2.h)

add_executable(My_Project ${SOURCE_FILES})

# For compiler warnings
target_compile_options(My_Project PRIVATE -Wall)
# Including SQLite3's headers
target_include_directories(My_Project PRIVATE ${INCLUDE_DIRS})
# Linking against sqlite3.dll
target_link_libraries(My_Project ${LIBRARIES})

最佳答案

如果不在引号之间放置路径,您可能会遇到问题。

因此最好这样写:

set(INCLUDE_DIRS "C:\\Libraries\\64_bit\\SQLite3\\include\\")

或者,更确切地说:

set(INCLUDE_DIRS "C:/Libraries/64_bit/SQLite3/include/")

此外,当前的 CMakeLists.txt 将无法找到 -lsqlite3。值得庆幸的是,CMake 使查找库变得容易:

# Optionally, add 'PATHS "C:/Libraries/64_bit/SQLite3/bin/"'
find_library(SQLITE3_LIBRARY NAMES sqlite3)

如果库在您的系统上是可发现的,上述命令将返回库的路径并将该路径存储在 SQLITE3_LIBRARY 中。剩下要做的就是将项目链接到 SQLite3 库:

# Link project to the SQLite3 library
target_link_libraries(MSP_Tool ${SQLITE3_LIBRARY})

关于c++ - CMake:target_include_directories() 找不到头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43811569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com