Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 925
einpoklum Avatar asked Oct 13 '25 04:10

einpoklum


1 Answers

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.

like image 89
fabian Avatar answered Oct 15 '25 22:10

fabian