When should I use CMake's add_dependencies instead of target_link_libraries?

I'm used to defining CMake target dependencies using the target_link_libraries() command. Recently, though, I've noticed the existence of another command, add_dependencies(). When should I use the latter rather than the former?

Note: I tried reading this question: target_link_libraries and add_dependencies - but the answers confused me. I understand I should not use both. But it's not entirely clear to me when I should use which.

2

1 Answer

add_dependencies should only be used where you need to establish a dependency in the build process that would otherwise not be present.

If a you want to influence the linker options, you use target_link_libraries.

For INTERFACE targets target_link_libraries should be used, even if it doesn't have an effect on the linker options. An example would be "linking" a header only library: This usually only results in include directories being inherited; you use target_link_libraries for this nonetheless.

A notable example of using add_dependencies would be to make sure MODULE targets dynamically loaded by an executable target get built when building the executable.

3

ncG1vNJzZmirpJawrLvVnqmfpJ%2Bse6S7zGiorp2jqbawutJobm1oZGiDcoGOsJ%2Bepl2otbDBy51komWlqLJur8yaop6rXZaxpXnDnqeeppSau6S1xKxkoqajqbKisIyonWaskae0psCMpaCno12htqO%2BwKugnqtfbIFxgJRrZ20%3D