From: Nicolas B. <nic...@la...> - 2005-07-07 20:56:44
Attachments:
CMakeLists.txt
|
Hi, I've made a first version of a CMakeList.txt file including an install target, only for vcl, but I wanted to submit it to you before continuing, to make sure I'm not missing some essential save-your-time tricks :) The main problem I encountered is that I could not find an automake nobase_HEADERS feature in CMake to install automatically bar/foo.h into $prefix/bar/foo.h and not into $prefix/foo.h directly. Attached is how a vcl/CMakeList.txt could look like. Thanks, Nicolas |
From: Nicolas B. <nic...@en...> - 2005-07-08 12:17:48
|
Ok, please forget this first brute force and stupid version :-) Here is a much simpler approach to workaround the nobase feature, using this macro: # INSTALL_NOBASE_HEADER_FILES(prefix file file file ...) # Will create install rules for those files of the list # which are headers (.h or .txx). MACRO(INSTALL_NOBASE_HEADER_FILES prefix) FOREACH(file ${ARGN}) IF(${file} MATCHES "\\.(h|txx)$") GET_FILENAME_COMPONENT(dir ${file} PATH) INSTALL_FILES(${prefix}/${dir} FILES ${file}) ENDIF(${file} MATCHES "\\.(h|txx)$") ENDFOREACH(file ${filelist}) ENDMACRO(INSTALL_NOBASE_HEADER_FILES) And then just calling it in CMakeList.txt files like this (for vcl/): INSTALL_NOBASE_HEADER_FILES(/include/vcl ${vcl_sources}) Just adding this at the end of the original vcl/CMakeList.txt file seems to do the job. This avoids creating one CMakeList.txt file per directory when not necessary, and enables the reuse of the vcl_sources variable, instead of taking blindly all the .h and .txx files of the directory (the approach of Itk). What do you think ? -- Nicolas On Thursday 07 July 2005 22:56, Nicolas Burrus wrote: > Hi, > > I've made a first version of a CMakeList.txt file including an install > target, only for vcl, but I wanted to submit it to you before continuing, > to make sure I'm not missing some essential save-your-time tricks :) > > The main problem I encountered is that I could not find an automake > nobase_HEADERS feature in CMake to install automatically bar/foo.h into > $prefix/bar/foo.h and not into $prefix/foo.h directly. > > Attached is how a vcl/CMakeList.txt could look like. > > Thanks, > > Nicolas |
From: Brad K. <bra...@ki...> - 2005-07-08 13:19:41
|
Nicolas Burrus wrote: > And then just calling it in CMakeList.txt files like this (for vcl/): > > INSTALL_NOBASE_HEADER_FILES(/include/vcl ${vcl_sources}) > > Just adding this at the end of the original vcl/CMakeList.txt file seems to do > the job. This avoids creating one CMakeList.txt file per directory when not > necessary, and enables the reuse of the vcl_sources variable, instead of > taking blindly all the .h and .txx files of the directory (the approach of > Itk). > > What do you think ? This looks like a simple solution for vcl but for the rest of vxl there is pretty much already a CMakeLists.txt file per directory. FYI, there are already install rules in ITK's snapshot of a part of vxl, though it is 19 months old: http://www.itk.org/cgi-bin/viewcvs.cgi/Utilities/vxl/?root=Insight -Brad |
From: Nicolas B. <nic...@la...> - 2005-07-07 22:14:59
|
Ok, please forget this first brute force and stupid version :-) Here is a much simpler approach to workaround the nobase feature by defining this macro: # INSTALL_NOBASE_HEADER_FILES(prefix file file file ...) # Will create install rules for those files of the list # which are headers (.h or .txx). MACRO(INSTALL_NOBASE_HEADER_FILES prefix) FOREACH(file ${ARGN}) IF(${file} MATCHES "\\.(h|txx)$") GET_FILENAME_COMPONENT(dir ${file} PATH) INSTALL_FILES(${prefix}/${dir} FILES ${file}) ENDIF(${file} MATCHES "\\.(h|txx)$") ENDFOREACH(file ${filelist}) ENDMACRO(INSTALL_NOBASE_HEADER_FILES) And then just calling it in CMakeList.txt files like this (for vcl/): INSTALL_NOBASE_HEADER_FILES(/include/vcl ${vcl_sources}) Just adding this at the end of the original vcl/CMakeList.txt file seems to do the job. What do you think ? -- Nicolas On Thursday 07 July 2005 22:56, Nicolas Burrus wrote: > Hi, > > I've made a first version of a CMakeList.txt file including an install > target, only for vcl, but I wanted to submit it to you before continuing, > to make sure I'm not missing some essential save-your-time tricks :) > > The main problem I encountered is that I could not find an automake > nobase_HEADERS feature in CMake to install automatically bar/foo.h into > $prefix/bar/foo.h and not into $prefix/foo.h directly. > > Attached is how a vcl/CMakeList.txt could look like. > > Thanks, > > Nicolas |