CMakeMacroGatherProjectFiles: Difference between revisions

From KitwarePublic
Jump to navigationJump to search
(Remove leading space rectangles from preformatted blocks)
(Replace content with link to new CMake community wiki)
 
Line 1: Line 1:
[[CMake_User_Contributed_Macros|Back]]
{{CMake/Template/Moved}}


This macro recursively collects the files from a project directory and caches the list for future use. Tailor the extensions that are included in the list according to your needs.
This page has moved [https://gitlab.kitware.com/cmake/community/wikis/contrib/macros/GatherProjectFiles here].
 
-----
 
<pre>
# add extra sources to the defined project
MACRO ( GatherProjectFiles ProjectName ProjectDir ProjectSources )
 
  #look for the cache file
  SET ( FoundCacheFile "FoundCacheFile-NOTFOUND" )
  FIND_FILE ( FoundCacheFile ${ProjectName}Sources.cmake PATHS ${CMAKE_CURRENT_BINARY_DIR} NO_DEFAULT_PATH NO_CMAKE_ENVIRONMENT_PATH NO_CMAKE_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH)
 
  IF ( FoundCacheFile )
    # read cached file list
    MESSAGE ( STATUS "    Found cache file ${FoundCacheFile}" )
    INCLUDE ( ${CMAKE_CURRENT_BINARY_DIR}/${ProjectName}Sources.cmake )
 
  ELSE ( FoundCacheFile )
    # get the file lists
    SET ( Dir ${CMAKE_HOME_DIRECTORY}/${ProjectDir} )
 
    # add your other extensions here (this could be probably done nicer)
    FILE ( GLOB_RECURSE DirSources ${Dir}/*.c ${Dir}/*.cpp ${Dir}/*.h ${Dir}/*.inl ${Dir}/*.rc ${Dir}/*.ico )
 
    # write cached file list
    MESSAGE ( STATUS "    Generating ${ProjectName}Sources.cmake" )
    STRING ( CONFIGURE "@DirSources@" TempString @ONLY )
    STRING ( REPLACE ";" " " "DirSourcesAsString" "${TempString}" )
    CONFIGURE_FILE ( ${CMAKE_HOME_DIRECTORY}/CMake/SourceFilesTemplate.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/${ProjectName}Sources.cmake @ONLY )
 
  ENDIF ( FoundCacheFile )
  SET ( "${ProjectSources}" ${DirSources} )
ENDMACRO ( GatherProjectFiles )
</pre>
 
-----
 
The template file (located in ''CMAKE_HOME_DIRECTORY\CMake\SourceFilesTemplate.cmake.in'') looks like this:
 
<pre>
# Cache source files
 
# All sources
SET ( DirSources @DirSourcesAsString@ )
</pre>
-----
 
A typical use for this macro would be:
 
<pre>
GatherProjectFiles ( MyLib src/MyLib MyLibSources )
ADD_LIBRARY (MyLib SHARED ${MyLibSources} )
</pre>
 
 
[[CMake_User_Contributed_Macros|Back]]
 
{{CMake/Template/Footer}}
[[Category:CMakeMacro]]

Latest revision as of 15:41, 30 April 2018


The CMake community Wiki has moved to the Kitware GitLab Instance.

This page has moved here.