# Building a combined static library

**URL:** <https://discourse.cmake.org/t/building-a-combined-static-library/12962>\
**Category:** Code\
**Tags:** os:linux, os:windows\
**Created:** [November 13, 2024, 12:54pm UTC](https://discourse.cmake.org/t/building-a-combined-static-library/12962 "2024-11-13T12:54:37Z")\
**Posts on this page:** 1\
**Showing post:** 2

<div class="post-metadata">

**Author:** ![jhol](https://discourse.cmake.org/user_avatar/discourse.cmake.org/jhol/32/5042_2.png) [@jhol](https://discourse.cmake.org/u/jhol)\
**Post date:** [November 13, 2024, 5:17pm UTC](https://discourse.cmake.org/t/building-a-combined-static-library/12962/2 "2024-11-13T17:17:01Z")

</div>

> [@zaufi](#):
>
> It’ll be nice to use `$<LIST:TRANSFORM…>` somehow to replace a CMake target with `$<TARGET_PROPERTY:ARCHIVE_OUTPUT_NAME>` (with fallback to `OUTPUT_NAME`) for all list items… Apparently, it’s not possible for now anyway…

I found a way of doing list-maps with generator expressions, by writing a generator expression to apply to each element, escaping the generator expression and feeding it through `$<LIST:TRANSFORM>` and `$<GENEX_EVAL>`:

> [@Mapping lists in generator expressions](https://discourse.cmake.org/t/mapping-lists-in-generator-expressions/12833/3):
>
> Ok, that works! Thank you. It even works recursively!: set(targets picolibc::picolibc ZLIB::ZLIB) function(escape\_generator\_expression var) string(REPLACE "\>" "\_\_ANGLE\_R\_\_" ${var} "${${var}}") string(REPLACE "$" "$\<1:$\>" ${var} "${${var}}") string(REPLACE "," "$\<COMMA\>" ${var} "${${var}}") string(REPLACE "\_\_ANGLE\_R\_\_" "$\<ANGLE-R\>" ${var} "${${var}}") return(PROPAGATE ${var}) endfunction() set(prop "INTERFACE\_INCLUDE\_DIRECTORIES") set(get\_prop "$\<TARGET\_PROPERTY:\\1,${prop}\>…

---

_[View the full topic](https://discourse.cmake.org/t/building-a-combined-static-library/12962)._
