Platform: Linux, Ninja.
Goal: combine many static libraries into one static library, i.e. run something like ar rcs hugelib.a lib1.a lib2.a [...]
. Why? For the user to use C/C++ source files in script mode, and so that user only needs to compile the file and link it to one single library that is shipped with their environment.
Problem: cannot find a way to retrieve all link dependencies of a target and automate this procedure. For example, the link line of the user-written C++ file:
[2/2] : && /usr/bin/c++ -Wall -Wextra -g
src/cxx_client/CMakeFiles/sbal_testcase_01.dir/__/__/tests/sbal/testcase_01/SBAL.cc.o
-o bin/sbal_testcase_01 lib/libsbal_cxx_client.a lib/libsbal_protocols.a
/usr/local/lib/libgrpc++.a /usr/local/lib/libgrpc.a /usr/local/lib/libz.a
/usr/local/lib/libcares.a -lnsl /usr/local/lib/libaddress_sorting.a
/usr/local/lib/libre2.a /usr/local/lib/libabsl_raw_hash_set.a
/usr/local/lib/libabsl_hashtablez_sampler.a /usr/local/lib/libabsl_hash.a
/usr/local/lib/libabsl_city.a /usr/local/lib/libabsl_low_level_hash.a
/usr/local/lib/libabsl_statusor.a /usr/local/lib/libabsl_bad_variant_access.a
/usr/local/lib/libgpr.a /usr/local/lib/libupb.a -ldl -lm -lrt
/usr/local/lib/libabsl_status.a /usr/local/lib/libabsl_random_distributions.a
/usr/local/lib/libabsl_random_seed_sequences.a
/usr/local/lib/libabsl_random_internal_pool_urbg.a
/usr/local/lib/libabsl_random_internal_randen.a
/usr/local/lib/libabsl_random_internal_randen_hwaes.a
/usr/local/lib/libabsl_random_internal_randen_hwaes_impl.a
/usr/local/lib/libabsl_random_internal_randen_slow.a
/usr/local/lib/libabsl_random_internal_platform.a
/usr/local/lib/libabsl_random_internal_seed_material.a
/usr/local/lib/libabsl_random_seed_gen_exception.a
/usr/local/lib/libabsl_cord.a /usr/local/lib/libabsl_bad_optional_access.a
/usr/local/lib/libabsl_cordz_info.a /usr/local/lib/libabsl_cord_internal.a
/usr/local/lib/libabsl_cordz_functions.a
/usr/local/lib/libabsl_exponential_biased.a
/usr/local/lib/libabsl_cordz_handle.a
/usr/local/lib/libabsl_str_format_internal.a
/usr/local/lib/libabsl_synchronization.a /usr/local/lib/libabsl_stacktrace.a
/usr/local/lib/libabsl_symbolize.a /usr/local/lib/libabsl_debugging_internal.a
/usr/local/lib/libabsl_demangle_internal.a
/usr/local/lib/libabsl_graphcycles_internal.a
/usr/local/lib/libabsl_malloc_internal.a /usr/local/lib/libabsl_time.a
/usr/local/lib/libabsl_strings.a /usr/local/lib/libabsl_throw_delegate.a
/usr/local/lib/libabsl_int128.a /usr/local/lib/libabsl_strings_internal.a
/usr/local/lib/libabsl_base.a /usr/local/lib/libabsl_spinlock_wait.a -lrt
/usr/local/lib/libabsl_raw_logging_internal.a
/usr/local/lib/libabsl_log_severity.a /usr/local/lib/libabsl_civil_time.a
/usr/local/lib/libabsl_time_zone.a /usr/local/lib/libssl.a
/usr/local/lib/libcrypto.a -lpthread /usr/local/lib/libprotobuf.a
/home/hgkjshegfskef/.local/soft/trace/build/installed/lib/libtrace.a && :
I need a list of paths to these static libraries, to pass them to ar
, to create a single static library. The action of creating such archive is expected to be modelled with add_custom_command
. I have tried using $<TARGET_PROPERTY:user_file_target,LINK_LIBRARIES>
, but it only lists the direct dependencies, and in CMake target names instead of paths to archives, while I need the full dependency list, and in paths to archives.