使用target_link_libraries函数:这个函数可以让你指定一个目标(target)依赖于哪些其他目标或库。CMake会自动根据这些依赖关系来确定编译的顺序,先编译被依赖的目标,再编译依赖它们的目标。比如,如果你有两个库libA和libB,其中libB依赖于libA,那么你可以在CMakeLists.txt中写:
add_library(libA SHARED libA.cpp)
add_library(libB SHARED libB.cpp)
target_link_libraries(libB libA)
这样,CMake就会先编译libA,再编译libB。
使用add_dependencies函数:这个函数可以让你指定一个目标(target)依赖于哪些其他目标(不一定是库)。CMake会自动根据这些依赖关系来确定编译的顺序,先编译被依赖的目标,再编译依赖它们的目标。比如,如果你有两个可执行程序exeA和exeB,其中exeB需要在exeA生成后才能运行,那么你可以在CMakeLists.txt中写:
add_executable(exeA exeA.cpp)
add_executable(exeB exeB.cpp)
add_dependencies(exeB exeA)
这样,CMake就会先编译exeA,再编译exeB。
使用set_property函数:这个函数可以让你设置一个目标(target)或者一个源文件(source file)的属性(property)。其中有一种属性叫做FOLDER,它可以让你将不同的目标或源文件分组到不同的文件夹中。CMake会按照文件夹名称的字母顺序来确定编译的顺序。比如,如果你有三个库libX、libY和libZ,并且想要按照X、Y、Z的顺序来编译它们,那么你可以在CMakeLists.txt中写:
add_library(libX SHARED libX.cpp)
add_library(libY SHARED libY.cpp)
add_library(libZ SHARED libZ.cpp)
set_property(TARGET libX PROPERTY FOLDER "X")
set_property(TARGET libY PROPERTY FOLDER "Y")
set_property(TARGET libZ PROPERTY FOLDER "Z")
这样,CMake就会按照X、Y、Z的顺序来编译它们。