我查看了这篇文章:Using CMake to statically link to a library outside of the project。但是我仍然无法解释这意味着什么:
add_subdirectory(/path/to/the/library/source/directory subproject/grzeslib)
我假设“/ path / to / the / library / source / directory”表示来自硬盘的路径,但我不明白“subproject / grzeslib”的含义。 现在我试过了:
include_directories(../path/to/dir)
add_subdirectory (../path/to/dir .)
但我得到了一个精心的警告。有更好的方法吗?
答案 0 :(得分:14)
第二个参数是该子目录中目标结果的输出目录。
从此处的文档:https://cmake.org/cmake/help/v3.3/command/add_subdirectory.html
<强> add_subdirectory 强>
将一个子目录添加到构建中。
add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
向构建添加子目录。
- source_dir指定源CMakeLists.txt和代码文件所在的目录。如果它是相对路径呢 将针对当前目录进行评估(典型的 用法),但也可能是绝对路径。
- binary_dir指定放置输出文件的目录。如果是相对路径,则将对其进行评估 当前输出目录,但它也可能是绝对路径。如果 在扩展之前,未指定binary_dir,即source_dir的值 将使用任何相对路径(典型用法)。
- 在当前输入中处理之前,CMake将立即处理指定源目录中的CMakeLists.txt文件 文件继续超出此命令。
- 如果提供了EXCLUDE_FROM_ALL参数,则子目录中的目标将不会包含在父目录的ALL目标中 目录默认情况下,将从IDE项目文件中排除。 用户必须在子目录中显式构建目标。这意味着 当子目录包含项目的单独部分时使用 这是有用但不必要的,例如一组例子。通常 子目录应包含自己的project()命令调用 这样就可以在子目录中生成完整的构建系统 (例如VS IDE解决方案文件)。请注意目标间依赖关系 取代这种排斥。如果由父项目构建的目标 依赖于子目录中的目标,依赖目标将是 包含在父项目构建系统中以满足依赖性。
答案 1 :(得分:2)
向构建添加子目录。 source_dir指定 源CMakeLists.txt和代码文件所在的目录 位于。如果是相对路径,则将对其进行评估 当前目录(典型用法),但也可能是 绝对路径。 binary_dir指定要在其中的目录 放置输出文件。如果它是相对路径,则将对其进行评估 关于当前输出目录,但它也可能是一个 绝对路径。如果未指定binary_dir,则为 在扩展任何相对路径之前,将使用source_dir( 典型用法)。指定源中的CMakeLists.txt文件 目录将在处理之前由CMake立即处理 当前输入文件继续超出此命令
从您的示例中,在&#34; / path / to / the / library / source / directory&#34;中创建的所有二进制文件;将被放置在&#34; subproject / grzeslib&#34;中,保持&#34;清洁&#34;是一件好事。来源dirs。