CMake 找不到文件或目录
CMake can't find file or directory
我正在处理一个包含多个子目录的 CMake 项目,但我无法让它工作。我的工作目录如下:
├───main.cpp
├───CMakeLists.txt
├───build
├───States
└───CMakeLists.txt
└───Elevator
├───CMakeLists.txt
构建项目后,出现 Elevator/Elevator.h: No such file or directory
错误。我的项目设置方式,Elevator 包含在 States 中,显然 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 包括带 #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 文件夹及其父文件夹添加到包含目录。
我正在处理一个包含多个子目录的 CMake 项目,但我无法让它工作。我的工作目录如下:
├───main.cpp
├───CMakeLists.txt
├───build
├───States
└───CMakeLists.txt
└───Elevator
├───CMakeLists.txt
构建项目后,出现 Elevator/Elevator.h: No such file or directory
错误。我的项目设置方式,Elevator 包含在 States 中,显然 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 包括带 #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 文件夹及其父文件夹添加到包含目录。