Created
May 28, 2017 09:58
-
-
Save tusharpm/d71dd6cab8a00320ddb48cc82bf7f64c to your computer and use it in GitHub Desktop.
Reading external Makefile variables (only) into CMake
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Simple CMake utility to read variables from MK files | |
# - Gets contents from given file (name or path) | |
# - Parses the assignment statements | |
# - Makes the same assignments in the PARENT_SCOPE | |
if(POLICY CMP0007) | |
cmake_policy(SET CMP0007 NEW) | |
endif() | |
function(ReadVariables MKFile) | |
file(READ "${MKFile}" FileContents) | |
string(REPLACE "\\\n" "" FileContents ${FileContents}) | |
string(REPLACE "\n" ";" FileLines ${FileContents}) | |
list(REMOVE_ITEM FileLines "") | |
foreach(line ${FileLines}) | |
string(REPLACE "=" ";" line_split ${line}) | |
list(LENGTH line_split count) | |
if (count LESS 2) | |
message(STATUS "Skipping ${line}") | |
continue() | |
endif() | |
list(GET line_split -1 value) | |
string(STRIP ${value} value) | |
separate_arguments(value) | |
list(REMOVE_AT line_split -1) | |
foreach(var_name ${line_split}) | |
string(STRIP ${var_name} var_name) | |
set(${var_name} ${value} PARENT_SCOPE) | |
endforeach() | |
endforeach() | |
endfunction() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# An example usage of the ReadVariables function | |
# Do this once in the project's top CMakeLists.txt | |
include(ReadVariables.cmake) | |
# Use the following from subdirectories as required | |
# CAUTION: this sets variables in the current scope (directory/function) | |
ReadVariables(opus_sources.mk) | |
message("OPUS_SOURCES: ${OPUS_SOURCES}") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I realize this is bringing up the dead :)
I changed the two lines for the outer for loop to
foreach(rawLine ${FileLines})
string(REGEX REPLACE "#.*" "" line ${rawLine})
Since any comment should be truncated. this way if the line is
.... # var = foo
nothing is done