# a simple C only test case cmake_minimum_required (VERSION 2.6) PROJECT (MacroTest) MACRO(FAILED testname) MESSAGE(SEND_ERROR "${testname} failed ${ARGN}") ENDMACRO(FAILED) MACRO(PASS testname) MESSAGE("${testname} passed ${ARGN}") ENDMACRO(PASS) # test ARGC MACRO(weird_name) IF("${ARGC}" EQUAL "3") PASS("ARGC") ELSE("${ARGC}" EQUAL "3") FAILED("ARGC" "Got: ${ARGC}") ENDIF("${ARGC}" EQUAL "3") ENDMACRO(weird_name) WeIrD_nAmE(a1 a2 a3) # test ARGN MACRO(test_argn_macro argument) IF("${ARGN}" EQUAL "3") PASS("ARGN") ELSE("${ARGN}" EQUAL "3") FAILED("ARGN" "Got: ${ARGN}") ENDIF("${ARGN}" EQUAL "3") ENDMACRO(test_argn_macro) Test_Argn_Macro(ignored 3) # case test MACRO(strange_macro m) SET("${m}" strange_macro) ENDMACRO(strange_macro m) 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("${var}" STREQUAL "strange_macro" AND "${second_var}" STREQUAL "second_var") FAILED("Case test" "(${var} ${second_var})") ENDIF("${var}" STREQUAL "strange_macro" AND "${second_var}" STREQUAL "second_var") # test backing up command MACRO(ADD_EXECUTABLE exec) _ADD_EXECUTABLE("mini${exec}" ${ARGN}) ENDMACRO(ADD_EXECUTABLE) 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(SOME_CHECK) MESSAGE(FATAL_ERROR "CheckCSourceCompiles does not work") ENDIF(SOME_CHECK) 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(SOME_CHECK) MESSAGE(FATAL_ERROR "CheckCXXSourceCompiles does not work") ENDIF(SOME_CHECK) ADD_EXECUTABLE(MacroTest macroTest.c) MACRO(GET_CURRENT_FILE var) SET(${var} ${CMAKE_CURRENT_LIST_FILE}) ENDMACRO(GET_CURRENT_FILE) INCLUDE(context.cmake)