I have a setup where an external tool (cargo) produces a shared library, but it needs to be able to link dependencies generated by CMake. My current setup looks like this:
add_custom_target(${target_name} ALL
COMMAND ${CMAKE_COMMAND}
${env_args}
${cargo_cmd}
--crate-type=cdylib
--
# This needs to contain `-l`/`-L` arguments
${rustc_extra_args}
WORKING_DIRECTORY ${rust_dir}
COMMENT "start cargo for ${target_name} with '${cargo_cmd}' dynamic"
VERBATIM
)
# `foo` and `bar` are created via `add_library` in some other file,
# also has some `target_link_libraryes` set
add_dependencies(${target_name} foo bar)
My problem is that the add_custom_target
command needs to be passed -l
and -L
linker args to correctly link libfoo
and libbar
, including their transitive dependencies. This seems like a case for generator expressions, but I don’t see any on this page that helps locate information about dependencies.
I also cannot query anything with get_target_property
before the dependency is added.
Ideally I would have something simple that expands to -Lnative=/build/foo-path -Lnative=/build/bar-path -lstatic=foo -lstatic=bar
, or just the full library paths to pass to the linker.
What is the best way to go about this? My current solution is to hand-write library output paths, but this isn’t very maintainable.