Re: [CMake] Splitting directory and file.

2011-03-04 Thread Pablo Zurita
Yeah I was aware of that, I forgot to state that on the comment for the 
function. This was made on purpose since I don't want the pain of adding every 
file to CMake and I certainly don't want CMake running automatically.

Thanks,
Pablo Zurita.

PS: the sourceFiles argument must be removed from the function or else the 
first file of each directory won't be in the right filter.

Sent from my iPhone

On Mar 3, 2011, at 2:54 AM, Michael Wild them...@gmail.com wrote:

 On 03/03/2011 05:00 AM, Pablo Zurita wrote:
 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.
 
 
 
 Using file(GLOB) or file(GLOB_RECURSE) to assemble a list of source
 files is usually a bad idea. If you add or remove a source file, you
 will have to re-run CMake manually. If you listed all sources
 explicitly, there would be no such problem, as the build system would
 notice that the CMakeLists.txt has been modified, and then re-run CMake.
 
 Michael
 ___
 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
___
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:

Re: [CMake] Splitting directory and file.

2011-03-02 Thread Pablo Zurita
Yes, that works.

Now I just need to remove the last character if it is a forward slash. How can 
I do that?

Thanks,
Pablo Zurita.

Sent from my iPhone

On Mar 2, 2011, at 1:47 AM, Yuri Timenkov y...@timenkov.ru wrote:

 Does get_filename_component help?
 
 On Wed, Mar 2, 2011 at 6: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
 
___
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

Re: [CMake] Splitting directory and file.

2011-03-02 Thread Michael Wild
string(REGEX REPLACE /+$  dname ${dname})

Strips all trailing slashes. But honestly, man cmake would have been
way faster and less embarrassing...

HTH

Michael

On 03/02/2011 01:41 PM, Pablo Zurita wrote:
 Yes, that works.
 
 Now I just need to remove the last character if it is a forward slash.
 How can I do that?
 
 Thanks,
 Pablo Zurita.
 
 Sent from my iPhone
 
 On Mar 2, 2011, at 1:47 AM, Yuri Timenkov y...@timenkov.ru
 mailto:y...@timenkov.ru wrote:
 
 Does get_filename_component help?

 On Wed, Mar 2, 2011 at 6:17 AM, Pablo Zurita
 mailto:pzur...@gmail.compzur...@gmail.com
 mailto: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


Re: [CMake] Splitting directory and file.

2011-03-02 Thread Pablo Zurita
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


Re: [CMake] Splitting directory and file.

2011-03-02 Thread Michael Wild
On 03/03/2011 05:00 AM, Pablo Zurita wrote:
 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.



Using file(GLOB) or file(GLOB_RECURSE) to assemble a list of source
files is usually a bad idea. If you add or remove a source file, you
will have to re-run CMake manually. If you listed all sources
explicitly, there would be no such problem, as the build system would
notice that the CMakeLists.txt has been modified, and then re-run CMake.

Michael
___
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


[CMake] Splitting directory and file.

2011-03-01 Thread Pablo Zurita
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


Re: [CMake] Splitting directory and file.

2011-03-01 Thread Yuri Timenkov
Does get_filename_component help?

On Wed, Mar 2, 2011 at 6: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

___
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