CMakeMacroGatherProjectFiles
From KitwarePublic
Jump to navigationJump to search
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.
# 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} ) 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 )
The template file (located in CMAKE_HOME_DIRECTORY\CMake\SourceFilesTemplate.cmake.in) looks like this:
# Cache source files # All sources SET ( DirSources @DirSourcesAsString@ )
A typical use for this macro would be:
GenerateProject ( MyLib src/MyLib MyLibSources ) ADD_LIBRARY (MyLib SHARED ${MyLibSources} )