3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-05-25 19:36:20 +00:00

docs: clarify FetchContent runtime rpath requirements

Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/c364dcd3-231e-42bf-b928-60673cd045c0

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2026-05-25 17:13:07 +00:00 committed by GitHub
parent 9fc22b0735
commit 5b901d4d5c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -120,10 +120,32 @@ Once fetched, you can link the z3 library to your target:
target_link_libraries(yourTarget PRIVATE libz3)
```
If `yourTarget` is an executable or test that runs directly from the build tree,
you may also need to add the directory containing the fetched `libz3` shared
library to that target's build-time runtime search path. This is especially
important on macOS, where `libz3` uses an `@rpath` install name:
```cmake
target_link_libraries(yourTarget PRIVATE libz3)
if(TARGET libz3)
set_property(TARGET yourTarget APPEND PROPERTY
BUILD_RPATH "$<TARGET_FILE_DIR:libz3>"
)
endif()
```
If Z3 is pulled in by an intermediate library, set the `BUILD_RPATH` on the
final executable, test, or other runtime target that loads `libz3`, not just on
the intermediate library. If you install your binaries, also set
`INSTALL_RPATH` to match your installation layout.
**Important notes for FetchContent approach**:
- The target name is `libz3` (referring to the library target from `src/CMakeLists.txt`)
- An additional include directory for `src/api/c++` is added to enable `#include "z3++.h"` in C++ code
- Without the additional include directory, you would need `#include "c++/z3++.h"` instead
- For build-tree execution, you may need to add `"$<TARGET_FILE_DIR:libz3>"` to the
consuming executable's `BUILD_RPATH`
**Recommended: Create an alias for consistency with system installs**:
@ -219,6 +241,8 @@ target_link_libraries(yourTarget PRIVATE z3::libz3)
- Use `z3::libz3` target instead of raw library names for better CMake integration
- The target automatically provides the correct include directories, so no need for manual `target_include_directories`
- When using FetchContent, an alias is created to ensure target name consistency
- If the FetchContent path is used and your executable runs from the build tree, you may need
to add `"$<TARGET_FILE_DIR:libz3>"` to that executable's `BUILD_RPATH`
- Set `QUIET` in `find_package` to avoid error messages when Z3 isn't found