# wrong build order with generator expression TARGET\_LINKER\_FILE

**URL:** https://discourse.cmake.org/t/wrong-build-order-with-generator-expression-target-linker-file/380
**Category:** Usage
**Tags:** os:windows
**Created:** [December 13, 2019, 3:32pm UTC](https://discourse.cmake.org/t/wrong-build-order-with-generator-expression-target-linker-file/380 "2019-12-13T15:32:12Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![jwuttke](https://discourse.cmake.org/letter_avatar_proxy/v4/letter/j/9dc877/32.png) [@jwuttke](https://discourse.cmake.org/u/jwuttke)
#### Post date: [December 13, 2019, 3:32pm UTC](https://discourse.cmake.org/t/wrong-build-order-with-generator-expression-target-linker-file/380/1 "2019-12-13T15:32:12Z")

</div>

top-level `CMakeLists.txt` has

```
add_subdirectory(MyLib)
add_subdirectory(Tests)

```

`MyLib/CMakeLists.txt` has

```
add_library(MyLib <sources>)
...

```

`Tests/CMakeLists.txt` has

```
add_executable(Test1 <sources>)
target_link_libraries(Test1 PRIVATE $<TARGET_LINKER_FILE:MyLib>)

```

Works under Linux. Under Windows, however, the command

```
cmake --build . --config Release

```

fails because the system tries to build Test1 before MyLib.

What am I doing wrong?

---

<div class="post-metadata">

### Author: ![fenrir](https://discourse.cmake.org/user_avatar/discourse.cmake.org/fenrir/32/734_2.png) [@fenrir](https://discourse.cmake.org/u/fenrir)
#### Post date: [December 13, 2019, 3:40pm UTC](https://discourse.cmake.org/t/wrong-build-order-with-generator-expression-target-linker-file/380/2 "2019-12-13T15:40:51Z")

</div>

Don’t link to the resulting file. Link to the “MyLib” target. That way CMake will set the dependency right.

---

<div class="post-metadata">

### Author: ![jwuttke](https://discourse.cmake.org/letter_avatar_proxy/v4/letter/j/9dc877/32.png) [@jwuttke](https://discourse.cmake.org/u/jwuttke)
#### Post date: [December 13, 2019, 3:44pm UTC](https://discourse.cmake.org/t/wrong-build-order-with-generator-expression-target-linker-file/380/3 "2019-12-13T15:44:42Z")

</div>

When then would one use the generator expression?

---

<div class="post-metadata">

### Author: ![Angew](https://discourse.cmake.org/user_avatar/discourse.cmake.org/angew/32/229_2.png) [@Angew](https://discourse.cmake.org/u/Angew)
#### Post date: [December 13, 2019, 3:49pm UTC](https://discourse.cmake.org/t/wrong-build-order-with-generator-expression-target-linker-file/380/4 "2019-12-13T15:49:37Z")

</div>

When you need to access the file directly: for example, to copy it somewhere in a custom command, or to pass it to a script.

Generator expressions such as this one can be useful for more advanced/niche uses, but for basic everyday usage, you shouldn’t need them.

---

<div class="post-metadata">

### Author: ![jwuttke](https://discourse.cmake.org/letter_avatar_proxy/v4/letter/j/9dc877/32.png) [@jwuttke](https://discourse.cmake.org/u/jwuttke)
#### Post date: [December 13, 2019, 3:56pm UTC](https://discourse.cmake.org/t/wrong-build-order-with-generator-expression-target-linker-file/380/5 "2019-12-13T15:56:49Z")

</div>

OK, with plain `MyLib` in place of the generator expression everything works.

Thank you very much, Jakub and Petr.
