在我的 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/