On 30/11/2015 02:10, Dmitry Marakasov wrote:
Hi!
This question bugs me for a long time so I though maybe someone has
a solution. I have a project which includes an application and some
data for it. An application needs to know path to its data files, so
I pass it via compiler definition: ADD_DEFINITIONS(-DDATADIR="...")
The problem is that this path is different based on whether I want to
run the application from build directory:
ADD_DEFINITIONS(-DDATADIR="${PROJECT_SOURCE_DIR}/data")
or want to install it systemwide:
ADD_DEFINITIONS(-DDATADIR="${CMAKE_INSTALL_PREFIX}/share/myapp")
I want my project to both run from build directory and to be
installable systemwide, without the need to rebuild or specify extra
options.
- I don't want to make an applications search for its data relative
to executable path
- There's no cross-platform way to get an executable path
- This will break when executable is moved or hardlinked
- I don't want to try both paths, as this is error prone, as installed
executable may pick data files from repository or vice versa
- I don't want to make user specify additional cmake flags like
-DSYSTEMWIDE_INSTALLATION or -DRUN_LOCALLY.
- I don't want to use any wrapper scripts
- I don't want to build two executables
The best solution would be for cmake to fix path in executable file
right after installation, something similar to what cmake does with
rpaths. Or there could be a cross-platform way for executable to know
whether it was installed which I've missed.
Any ideas?
How about reading the path from a configuration file. The default when
there is no configuration file can be a relative path in the build tree.
Use an 'install(CODE ...)' command to write a configuration file to be
shipped with the executable that contains the path to use when
installed. Application reads configuration file if it is there and uses
contents to determine the path to the data.
Regards
Bill.
--
Powered by www.kitware.com
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Kitware offers various services to support the CMake community. For more
information on each offering, please visit:
CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake