I’ve found the string(JSON ... GET)
to be a great way to separate project data (urls, md5s, git tags) from code by reading in a json file with those parameters. Especially useful for projects with lots of FetchContent/ExternalProject.
A general observation: I’ve been thinking about applications for string(JSON ... SET)
to store build metadata without using cmake-server or trace mode. Say for reproducibility and storing of a few key parameters. It looks like this can act like a mappable (dictionary) almost. I came up with this toy example of incrementally building up JSON string as one might with a dictionary in Python.
set(dat "{}")
set(fake "abc" "def" "xyz")
foreach(i RANGE 1)
string(JSON dat SET ${dat} key${i} "{}")
foreach(j RANGE 2)
list(GET fake ${j} x)
string(JSON dat SET ${dat} key${i} prp${j} \"${x}\")
endforeach()
endforeach()
message(${dat})
results in:
{
"key0" :
{
"prp0" : "abc",
"prp1" : "def",
"prp2" : "xyz"
},
"key1" :
{
"prp0" : "abc",
"prp1" : "def",
"prp2" : "xyz"
}
}