I'm compiling a binary, and I want to add its dependency libraries in two different target_link_libraries()
commands for various reasons.
My commands look like this:
target_link_libraries(my_prog PRIVATE foo bar)
target_link_libraries(my_prog baz)
and I get the error:
The keyword signature for target_link_libraries has already been used with
the target "my_prog". All uses of target_link_libraries with a target
must be either all-keyword or all-plain.
The uses of the keyword signature are here:
* tests/CMakeLists.txt:10 (target_link_libraries)
What does this mean? What should I do?
Your use of target_link_libraries()
is indeed problematic, as it involves two different "flavors" of this command, a traditional and a newer one.
In one use, you specify the dependency is PRIVATE
; in the other, you specify nothing. That's not acceptable: Either you specify PUBLIC
/PRIVATE
/INTERFACE
for all elements, or for none.
So, you can fix your CMakeLists.txt
to say either:
target_link_libraries(my_prog foo bar)
target_link_libraries(my_prog baz)
or
target_link_libraries(my_prog PRIVATE foo bar)
target_link_libraries(my_prog PRIVATE baz)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With