如何在CMake中明确指定树外源?

use*_*750 12 c++ cmake

我查看了这篇文章:使用CMake静态链接到项目之外的库.但是我仍然无法解释这意味着什么:

add_subdirectory(/path/to/the/library/source/directory subproject/grzeslib)
Run Code Online (Sandbox Code Playgroud)

我假设"/ path/to/the/library/source/directory"表示来自硬盘的路径,但我不明白"subproject/grzeslib"的含义.现在我试过了:

include_directories(../path/to/dir)
add_subdirectory (../path/to/dir .) 
Run Code Online (Sandbox Code Playgroud)

但是我得到了一个精心的警告.有一个更好的方法吗?

小智 17

第二个参数是该子目录中目标结果的输出目录.

从这里的文档:https ://cmake.org/cmake/help/v3.3/command/add_subdirectory.html " add_subdirectory

将子目录添加到构建中.

add_subdirectory(source_dir [binary_dir]
             [EXCLUDE_FROM_ALL])
Run Code Online (Sandbox Code Playgroud)

将子目录添加到构建中.

  • source_dir指定源CMakeLists.txt和代码文件所在的目录.如果它是相对路径,它将根据当前目录(典型用法)进行评估,但它也可能是绝对路径.
  • binary_dir指定放置输出文件的目录.如果它是相对路径,它将根据当前输出目录进行评估,但它也可能是绝对路径.如果未指定binary_dir,则将使用扩展任何相对路径之前的source_dir的值(典型用法).
  • CMake将立即处理指定源目录中的CMakeLists.txt文件,然后在当前输入文件中继续处理此命令之后.
  • 如果提供了EXCLUDE_FROM_ALL参数,则默认情况下子目录中的目标将不会包含在父目录的ALL目标中,并且将从IDE项目文件中排除.用户必须在子目录中显式构建目标.当子目录包含有用但不必要的项目的单独部分(例如一组示例)时,可以使用此选项.通常,子目录应包含其自己的project()命令调用,以便在子目录中生成完整的构建系统(例如VS IDE解决方案文件).请注意,目标间依赖性取代此排除.如果父项目构建的目标依赖于子目录中的目标,则依赖目标将包含在父项目构建系统中以满足依赖性.

"

  • 好的,谢谢,但我不太确定如何决定将输出文件放在哪里。 (2认同)