On 01/22/2015 04:46 AM, Michael Enßlin wrote:
> (1.2) Using compile-time string manipulations to sanitize the filename.
> Due to limitations of C++, this requires template metaprogramming,
> leading to unreasonable complexity and compile times.
See below.
> Over the last several decades, at least on the POSIX platform, it has
> become common practice to invoke compilers with relative file paths
This is only true for in-source builds. CMake recommends out-of-source,
and then full paths are much more reliable. Even if one used relative
paths then your messages would still have a bunch of "../" in them for
an out-of-source build. Therefore I'll assume you're using in-source
builds.
Side note: To make relative paths behave right with __FILE__ you would
also need all include paths (-I) to be relative. Otherwise headers will
still get full paths. This would require much more work than just
trying to get compile lines to refer to source files with a relative
path.
So, assuming you have an in-source build then all sources and headers
must sit under a single prefix (the top of the source tree). With that
you can do something like:
string(LENGTH "${CMAKE_SOURCE_DIR}/" SRC_DIR_LEN)
add_definitions(-DSRC_DIR_LEN=${SRC_DIR_LEN})
and then in the source code do:
#define MY__FILE__ (__FILE__+SRC_DIR_LEN)
That will give you a compile-time constant __FILE__ with a relative path
and no runtime overhead. Use MY__FILE__ in your log macros.
-Brad
--
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-developers