c++ - CMake 找不到文件或目录
问题描述
我正在开发一个具有多个子目录的 CMake 项目,但我无法让它工作。我的工作目录如下:
├───main.cpp
├───CMakeLists.txt
├───build
├───States
└───CMakeLists.txt
└───Elevator
├───CMakeLists.txt
一旦我构建了项目,我就会得到Elevator/Elevator.h: No such file or directory
一个错误。我的项目的设置方式,电梯包含在状态中,显然 CMake 没有正确链接它们。
我的根 CMakeLists.txt:
cmake_minimum_required(VERSION 3.21.4)
project(Test)
set(CMAKE_CPP_STANDARD 11)
set(CMAKE_CPP_STANDARD_REQUIRED True)
add_subdirectory(Elevator)
add_subdirectory(States)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} PUBLIC Elevator States)
电梯里的那个:
set(elevator_source_files
Elevator.cpp
Elevator.h
Set.cpp
Set.h
)
add_library(Elevator ${elevator_source_files})
美国的 CMakeLists.txt:
set(state_source_files
State.h
State.cpp
InitialState.h
InitialState.cpp
EmergencyState.cpp
EmergencyState.h
IdleState.h
IdleState.cpp
MaintenanceState.h
MaintenanceState.cpp
MovingState.h
MovingState.cpp
AllStates.h
FSM.h
FSM.cpp
)
add_library(States ${state_source_files})
target_include_directories(States PUBLIC ${CMAKE_CURRENT_LIST_DIR}/..)
target_link_libraries(States PUBLIC Elevator)
我仍然是一个新手,所以任何帮助将不胜感激!值得注意的是 States.h 包括 Elevator 和#include "Elevator/Elevator.h"
更新:该项目现在构建并运行。我更新了描述中的 CMake 文件。
解决方案
要#include "Elevator/Elevator.h"
在 States 库中工作,您需要包含包含 Elevator 文件夹的文件夹。
解决此问题的一种方法是更改
target_include_directories(States PUBLIC ${CMAKE_CURRENT_LIST_DIR})
至
target_include_directories(States PUBLIC ${CMAKE_CURRENT_LIST_DIR}
${CMAKE_CURRENT_LIST_DIR}/..)
让 CMake 将 State 文件夹及其父文件夹添加到包含目录中。
推荐阅读
- php - 获取 Array 数据(序列化数据?)并显示,这段代码运行良好,但是为什么,它是否正确?
- c - 关于涉及 scanf() 的简单 C 程序的错误
- azure - 无法删除已禁用的订阅
- php - 致命错误:未捕获的错误:C:\xampp\htdocs\tutorial\Online_exam 中未定义的常量“登录”
- python - 从 4 个摄像头创建实时 3D 视频流
- flutter - 如何关闭 Android 模拟器的布局检查器?
- android - 如何从android应用程序导出数据库?使用 ADB run-as 清空数据库结果
- android - 在启动时运行 Android 守护程序
- xamarin - 如何自定义窗口拍照
- go - 输出标准输入和标准输出 os.exec Golang