如何控制cmake的子目录编译顺序?

Yun*_*Wen 9 compilation cmake subdirectory

这是我的CMakeLists.txt:

ADD_SUBDIRECTORY(third)
ADD_SUBDIRECTORY(utils)
ADD_SUBDIRECTORY(rpc)
Run Code Online (Sandbox Code Playgroud)

但是目录“ rpc”将在目录“ utils”之前进行编译,实际上“ rpc”取决于“ utils”,因此我将得到一个链接错误。

如何在“ utils”之后进行“ rpc”的编译?

谢谢。

arr*_*owd 9

当您使用target_link_libraries()函数并将其他目标名称传递给它时,CMake 会自动将此目标设置为依赖项。您还可以使用add_dependencies()手动指定依赖项。

另请注意,源代码编译的顺序与您的问题无关。链接错误(我猜,您看到的是“未定义的引用”)是因为您没有正确链接目标。


小智 6

如果“rpc”依赖于“utils”:

实用程序 CMAKELISTS.txt

project(utils)
add_library (utils SHARED ${PROJECT_SOURCE_LIST})
Run Code Online (Sandbox Code Playgroud)

rpc CMAKELISTS.txt

project(rpc)
add_library (rpc SHARED ${PROJECT_SOURCE_LIST})
# must add this command to scan dependencies of target rpc
add_dependencies (rpc utils)
target_link_libraries (${TEST_SOURCE_FILE_NAME} libutils.so)
Run Code Online (Sandbox Code Playgroud)