123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- set(thisDir "${CMAKE_CURRENT_LIST_DIR}")
- function(make_macro_name NAME OUT_VAR)
- string(STRIP "${NAME}" name)
- string(TOUPPER "${name}" name)
- string(REPLACE "-" "_" name "${name}")
- string(REGEX REPLACE "(^[0-9]+)|[^A-Z_0-9]" "" name "${name}")
- set(${OUT_VAR} "${name}" PARENT_SCOPE)
- endfunction()
- function(add_library_project NAME)
- set(options SHARED STATIC)
- set(oneValueArgs)
- set(multiValueArgs SOURCES TEST_SOURCES DEPENDENCIES)
- cmake_parse_arguments(PARAM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
- make_macro_name("${NAME}" macroName)
- set(testDependencies ${PARAM_DEPENDENCIES})
- list(TRANSFORM testDependencies APPEND _Test)
- # static is the default, but we also allow static it explicitly
- set(libType STATIC)
- if (PARAM_SHARED AND PARAM_STATIC)
- message(FATAL_ERROR "Library project ${NAME} can only be SHARED or STATIC, but not both!")
- elseif (PARAM_SHARED)
- set(libType SHARED)
- endif ()
- add_library("${NAME}" ${libType} ${PARAM_SOURCES})
- target_link_libraries("${NAME}" PUBLIC ${PARAM_DEPENDENCIES})
- target_include_directories("${NAME}" PUBLIC "${CMAKE_CURRENT_LIST_DIR}/include")
- if (PARAM_SHARED)
- target_compile_definitions("${NAME}" PRIVATE -D${macroName}_BUILD_SHARED)
- target_compile_definitions("${NAME}" INTERFACE -D${macroName}_USE_SHARED)
- endif ()
- add_library("${NAME}_Test" STATIC ${PARAM_TEST_SOURCES})
- target_link_libraries("${NAME}_Test" PUBLIC "${NAME}" gtest gmock ${testDependencies})
- add_executable("${NAME}_Tests" ${PARAM_TEST_SOURCES})
- target_link_libraries("${NAME}_Tests" PRIVATE "${NAME}" gtest gmock gmock_main ${testDependencies})
- add_test(NAME "${NAME}" COMMAND "${NAME}_Tests")
- endfunction()
- function(add_executable_project)
- # TODO
- endfunction()
|