David Cole wrote:
On Thu, May 5, 2011 at 7:08 AM, J.S. van Bethlehem <[email protected] <mailto:[email protected]>> wrote:

    Hello,

    Today I was trying something along the following lines:
    in CMakeLists.txt
    set(BASENAME some_text)
    set(${BASENAME}_DIR /some/path)
    set(${BASENAME}_SHARE /some/other/path)
    set(${BASENAME}_INCLUDES file1.h;file2.h;file3.h)
    configure_file(config.h.in <http://config.h.in> config.h @ONLY)

    and in config.h.in <http://config.h.in> do:
    set(INSTALL_PATH @@BASENAME@_DIR@)
    foreach(incl ${INSTALL_PATH})
    # do something
    endforeach(incl ${INSTALL_PATH})

    My expectation was that first @BASENAME@ would evaluate to
    'some_text' after which @some_text_DIR@ would evaluate to the
    respective value. This fails, so the obvious question is: am I
    trying something that is simply not possible, or should I use
    different syntax to accomplish this?



Why are you putting CMake script code into the file config.h.in <http://config.h.in>?

Seems like you want to generate the .h.in <http://h.in> file based on a CMake loop, and *then* use it in a configure_file call...

What do you want the final .h file to look like?

Aah, right, very silly of me using the 'config.h' name. It suggests somehow that I want to create C(++)(0x) header, but this is not the case. My apologies - I tried to quickly create a 'minimal example' but thereby created something that is not even close to what I want to achieve. Let me be a bit more specific then.

I tend to be quite modular when I write code (even though it's just for personal use) and I noticed that when creating CMake-files for each of these pieces I was continuously writing the same CMake script lines for these pieces. So I decided to create a special CMakeModules-package that stores .cmake-script files that define these macros. So in the above example BASENAME would be the name of my module (which I like to store in a variable to prevent typos when this name is rather long or in case I want to change it) Then in the example above the *_INCLUDES would be a list of *.cmake files that define a set of macros, not header-files. Then what I called config.h.in would be an in-file for a modulename-config.cmake file. Then when I do find_package(BASENAME) in my other sources, CMake would find the resulting configuration file, which would then take care of including the macro-files that are part of my CMakeModules-package.

Now that I'm reading back, I see I made another mistake: the variable to the foreach-command should be ${BASENAME}_INCLUDES; this is the piece of the configuration-file that will read my macro *.cmake files.

Again my apologies for the unclear message. Hopefully the comments I added now make things a bit clearer.

Yours sincerely,
Jakob van Bethlehem



_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to