-
Notifications
You must be signed in to change notification settings - Fork 828
Description
I am checking the best way to link PhysX against targets of my CMake project. The documentation reports the steps to add the include directories and the linked libraries.
However, considering that PhysX has a very good CMake structure, it would be great if the targets were directly exported by CMake.
I found that an export set already exists:
PhysX/physx/source/compiler/cmake/linux/CMakeLists.txt
Lines 114 to 118 in ae80ded
INSTALL( | |
TARGETS ${PHYSXDISTRO_LIBS} | |
EXPORT PhysXSDK | |
DESTINATION $<$<CONFIG:debug>:${PX_ROOT_LIB_DIR}/debug>$<$<CONFIG:release>:${PX_ROOT_LIB_DIR}/release>$<$<CONFIG:checked>:${PX_ROOT_LIB_DIR}/checked>$<$<CONFIG:profile>:${PX_ROOT_LIB_DIR}/profile> | |
) |
But it is never installed. This means that something similar is missing:
INSTALL(
EXPORT PhysXSDK
DESTINATION ...
NAMESPACE PhysX)
The final goal is having properly exported targets that transitively carry properties. Exporting the targets, together with a proper package config file, would allow user code to do the following:
# Add the install prefix to the CMake search path.
# It would be compatible also if users install outside the PhysX repo folder.
list(APPEND CMAKE_PREFIX_PATH "/path/to/repo/PhysX/install/linux/PhysX"
find_package(PhysX 4.1.1 REQUIRED COMPONENTS PhysX PhysXCommon PhysXCooking PhysXGpu ...)
add_library(MyLibrary SHARED src/mylibrary.cpp)
target_link_library(MyLibrary PhysX::PhysX PhysX::PhysXCommon PhysX::PhysXGpu ...)
Note that in this way users do not have to specify anything but the linked imported target. As a bonus user would also get a proper release matching.
Resources:
- https://gitlab.kitware.com/cmake/community/wikis/doc/tutorials/Packaging
- https://gitlab.kitware.com/cmake/community/wikis/doc/tutorials/Exporting-and-Importing-Targets#exporting-from-an-installation-tree
- https://gitlab.kitware.com/cmake/community/wikis/doc/tutorials/How-to-create-a-ProjectConfig.cmake-file
- https://cmake.org/cmake/help/latest/module/CMakePackageConfigHelpers.html