【问题标题】:CMakeLists.txt Error. - "add_subdirectory(source) - given source "source" which is not an existing directory". I am new to CMake struggling with thisCMakeLists.txt 错误。 - “add_subdirectory(source) - 给定源“source”,它不是现有目录”。我是 CMake 的新手,正在为此苦苦挣扎
【发布时间】:2025-12-07 08:50:02
【问题描述】:

这是我的 CMakeLists.txt 文件

cmake_minimum_required (VERSION 3.10)
project (hello DESCRIPTION "HELLO WORLD" VERSION 20.05.05)

option (TARGET_ONE "Build for Target One" OFF)

set (CMAKE_CXX_STANDARD 14)
set (CMAKE_CXX_STANDARD_REQUIRED ON)
set (CMAKE_POSITION_INDEPENDENT_CODE ON)

if (TARGET_ONE)
    add_definitions (-DTARGETONE)
endif()

add_subdirectory (source)

编辑:这是我正在使用的命令:

cd ~/build
CMAKE_FLAGS="CXX -DTARGET_ONE=ON -DCMAKE_BUILD_TYPE=Release" cmake .
~/build cmake --build .

【问题讨论】:

  • 您能否将您正在使用的 CMake 命令添加到您的问题中?
  • cd ~/build CMAKE_FLAGS="CXX -DTARGET_ONE=ON -DCMAKE_BUILD_TYPE=Release" cmake 。 ~/build cmake --build .
  • 您发布的CMakeLists.txt文件是否位于屏幕截图中文件浏览器中显示的目录中? add_subdirectory 查找相对于包含该命令的CMakeLists.txt 文件的目录的子目录。您在 gedit 中打开了 4(!) 个不同的 CMakeLists.txt 文件。
  • 嗨 @f* 是的,我发布的 CMakeLists.txt 文件是屏幕截图中文件浏览器中的文件。

标签: cmake cmakelists-options


【解决方案1】:

您似乎在为错误的目录调用 CMake。

给定一个项目目录<project_dir> 包含您的CMakeLists.txt 和一个子目录source,您可以按如下方式调用CMake:

cmake -S <project_dir> -B <build_dir> -DCMAKE_BUILD_TYPE=Release -DTARGET_ONE=ON
cmake --build <build_dir> --target all --config Release

如果目录&lt;build_dir&gt; 不存在,CMake 将创建它。

如果project 命令中没有使用LANGUAGES 参数,则默认激活语言CXXC

如果您的 CMake 版本低于 3.13,则它不理解 -S 选项并且对 -B 选项有不同的用法。但它有未记录的选项-H-B。 然后调用看起来像这样(-H-B 选项后面没有空格!):

cmake -H<project_dir> -B<build_dir> -DCMAKE_BUILD_TYPE=Release -DTARGET_ONE=ON

【讨论】:

  • 调用cmake的目录与问题完全无关。 add_subdirectory 使用相对路径始终解析相对于包含 CMakeLists.txt 文件的目录的路径,该文件包含此 add_subdirectory 命令,无论它是否是* CMakeLists.txt。调用工作目录 cmake 也无关紧要。
  • @f* 你是对的,目录无关紧要。我将重新制定答案。
最近更新 更多