【发布时间】:2021-10-05 23:25:01
【问题描述】:
我不知道如何导入位于不同目录中的源文件。我的项目结构如下:
root
- src
- core
App.h
App.cpp
CMakelist.txt
CMakelist.txt
main.cpp
CMakelist.txt
我的根目录下的主 CMakelist 如下所示:
cmake_minimum_required(VERSION 3.17)
project(edu)
set(CMAKE_CXX_STANDARD 17)
## add subdirectory with source files
add_subdirectory(src)
add_executable(edu main.cpp)
我的 src 下的 CMakelist 是这样的:
add_subdirectory(core)
最后我的核心下的 CMakelist 看起来像这样:
set(all_src
App.h
App.cpp
)
target_sources(core ${all_src})
但它不起作用,我得到一个错误:
无法为不是由该项目构建的目标“核心”指定源
我该如何解决?我的项目越来越大,将所有文件放在不同的目录中而不是将它们堆叠在 add_executable 中会很方便
谢谢!
【问题讨论】:
-
你在哪里定义核心目标?
-
@stephen-newell 核心目标?核心中的文件是我项目的一部分,它们不是库或其他任何东西,我真的需要那个定义吗?
-
如果您不想为核心使用单独的库,您可以在 src/CMakeLists.txt 中:
set(core_srcs core/App.cpp core/App.h),然后是add_executable(edu main.cpp ${core_srcs}。这使您可以按模块组织 CMakeLists.txt 并将源代码保存在不同的目录中,而不会增加 CMakeLists 和库的数量 -
@peter 谢谢,这能帮我解决导入问题吗?因为文件夹中的文件丢失了全局导入 - 包括
-
是的,这就像在一个 add_executable 中列出每个文件。您只是在它们的子目录中引用它们。变量只是让您按模块单独列出源。