Thanks for the help guys. With that I was able to write the following
function that allows me to deal with my source as I want.

        # create_source_group(relativeSourcePath sourceGroupName files)
        #
        # Creates a source group with the specified name relative to the 
relative path
        # specified.
        #
        # Parameters:
        #       - sourceGroupName: Name of the source group to create.
        #       - relativeSourcePath: Relative path to the files.
        #       - sourceFiles: Files to add to the source group.
        #
        # For example if you have the following directory structure:
        #
        #       - ExampleApplication
        #               - include
        #                       - Main.h
        #                               - Window
        #                                       Window.h
        #               - source
        #                       - Main.cpp
        #                               - Window
        #                                       Window.cpp
        #
        # You can get your list of files and call create_source_group the 
following way
        #
        #       file(GLOB_RECURSE my_source_files 
${CMAKE_CURRENT_SOURCE_DIR}/source/*)
        #       create_source_group("Source Files"
"${CMAKE_CURRENT_SOURCE_DIR}/source" ${my_source_files})
        #       file(GLOB_RECURSE my_header_files 
${CMAKE_CURRENT_SOURCE_DIR}/include/*)
        #       create_source_group("Header Files"
"${CMAKE_CURRENT_SOURCE_DIR}/include" ${my_header_files})
        #       add_executable(ExampleApplication ${my_source_files} 
${my_header_files})
        #
        # Then the generated solution would look like this
        #
        #       - ExampleApplication (project)
        #               - Header Files
        #                       - Main.h
        #                               - Window
        #                                       Window.h
        #               - Source Files
        #                       - Main.cpp
        #                               - Window
        #                                       Window.cpp
        #
        function(create_source_group sourceGroupName relativeSourcePath 
sourceFiles)
                FOREACH(currentSourceFile ${ARGN})
                        FILE(RELATIVE_PATH folder ${relativeSourcePath} 
${currentSourceFile})
                        get_filename_component(filename ${folder} NAME)
                        string(REPLACE ${filename} "" folder ${folder})
                        if(NOT folder STREQUAL "")
                                string(REGEX REPLACE "/+$" "" folderlast 
${folder})
                                string(REPLACE "/" "\\" folderlast 
${folderlast})
                                
SOURCE_GROUP("${sourceGroupName}\\${folderlast}" FILES ${currentSourceFile})
                        endif(NOT folder STREQUAL "")
                ENDFOREACH(currentSourceFile ${ARGN})
        endfunction(create_source_group)


Thanks,
Pablo Zurita.

On Wed, Mar 2, 2011 at 12:17 AM, Pablo Zurita <pzur...@gmail.com> wrote:
> Hello everybody,
>
> I'm just getting started and I need some help dealing with strings in
> CMake. Basically what I have a bunch of strings such as the ones
> below:
>
> "Main.cpp"
> "Window/Example/Example.cpp"
> "Window/Window.cpp"
>
> What I need to do is create two strings for each, one is going to be
> the directory, so the output in order for the list above is:
>
> ""
> "Window/Example"
> "Window"
>
> And the other string I need is the file itself. So the output for that would 
> be
>
> "Main.cpp"
> "Example.cpp"
> "Window.cpp"
>
> Since I'm processing each one by one it doesn't matter if there are 
> collisions.
>
> As you can see all I need to is find the first forward slash on the
> string reading from right to left, and then put what's on the left of
> that string on one variable, and what is to the right in another.
>
> Does anybody know how I can do that?
>
> Thanks,
> Pablo Zurita.
>
_______________________________________________
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