Re: [CMake] Splitting directory and file.
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.
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.
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.
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.
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.
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.
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