#!/usr/bin/env python3 import sys import os import itertools OPTIONS = { # compiler 'gcc': {'vars': {'CMAKE_CXX_COMPILER': 'g++', 'CMAKE_C_COMPILER': 'gcc'}}, 'clang': {'vars': {'CMAKE_CXX_COMPILER': 'clang++', 'CMAKE_C_COMPILER': 'clang'}}, # profile 'debug': {'vars': {'CMAKE_BUILD_TYPE': 'Debug', 'LTO': 'OFF'}, 'args': ['-G', '"Unix Makefiles"']}, 'release': {'vars': {'CMAKE_BUILD_TYPE': 'Release', 'LTO': 'ON'}}, # sanitizer 'sanitizer': {'vars': {'SANITIZER': 'ON'}, 'require': {'PROFILE': 'release'}}, # Default parameters '': { 'vars': { "CMAKE_EXPORT_COMPILE_COMMANDS": "ON", "TESTS": "ON", }, 'args': ['-G', 'Ninja'], }, } def split_all_path(path): parts = [] while len(path) > 1: head,tail = os.path.split(path) yield tail path = head if __name__ == '__main__': accumulated = [] components = [''] components += sys.argv[1:] components += itertools.takewhile(lambda x: x in OPTIONS, split_all_path(os.getcwd())) for key in components: obj = OPTIONS[key] vars = obj.get('vars', {}) args = obj.get('args', []) accumulated += [f"-D{key}={val}" for key, val in vars.items()] accumulated += args print("cmake ../../../ " + " ".join(accumulated))