# a simple C only test case cmake_minimum_required (VERSION 2.6) project (MacroTest) macro(FAILED testname) message(SEND_ERROR "${testname} failed ${ARGN}") endmacro() macro(PASS testname) message("${testname} passed ${ARGN}") endmacro() # test ARGC macro(weird_name) if("${ARGC}" EQUAL "3") PASS("ARGC") else() FAILED("ARGC" "Got: ${ARGC}") endif() endmacro() WeIrD_nAmE(a1 a2 a3) # test ARGN macro(test_argn_macro argument) if("${ARGN}" EQUAL "3") PASS("ARGN") else() FAILED("ARGN" "Got: ${ARGN}") endif() endmacro() Test_Argn_Macro(ignored 3) # case test macro(strange_macro m) set("${m}" strange_macro) endmacro() STRANGE_MACRO(var) set(second_var "second_var") if("${var}" STREQUAL "strange_macro" AND "${second_var}" STREQUAL "second_var") PASS("Case Test" "(${var} ${second_var})") else() FAILED("Case test" "(${var} ${second_var})") endif() # test backing up command macro(ADD_EXECUTABLE exec) _ADD_EXECUTABLE("mini${exec}" ${ARGN}) endmacro() include(CheckCSourceCompiles) Check_C_Source_Compiles( " #include #ifdef __CLASSIC_C__ int main(){ int ac; char*av[]; #else int main(int ac, char*av[]){ #endif if(ac > 1000){return *av[0];} return 0; }" SOME_CHECK) if(SOME_CHECK) message("CheckCSourceCompiles works") else() message(FATAL_ERROR "CheckCSourceCompiles does not work") endif() include(CheckCXXSourceCompiles) Check_CXX_Source_Compiles( " #include int main(int ac, char*av[]){ if(ac > 1000){return *av[0];} return 0; }" SOME_CHECK) if(SOME_CHECK) message("CheckCXXSourceCompiles works") else() message(FATAL_ERROR "CheckCXXSourceCompiles does not work") endif() add_executable(MacroTest macroTest.c) macro(GET_CURRENT_FILE var) set(${var} ${CMAKE_CURRENT_LIST_FILE}) endmacro() include(context.cmake)