CustomCommandGenerator.cmake 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. enable_language(C)
  2. add_library(generatorlib STATIC generatorlib.c)
  3. add_library(generatorobj OBJECT generatorobj.c)
  4. add_library(emptyobj OBJECT empty.c)
  5. add_library(emptyobj2 OBJECT empty.c)
  6. add_executable(generator generator.c $<TARGET_OBJECTS:generatorobj>)
  7. target_link_libraries(generator PRIVATE generatorlib)
  8. add_custom_command(OUTPUT generated.c COMMAND generator generated.c)
  9. add_executable(generated ${CMAKE_BINARY_DIR}/generated.c $<TARGET_OBJECTS:generatorobj> $<TARGET_OBJECTS:emptyobj>)
  10. target_link_libraries(generated PRIVATE generatorlib)
  11. file(GENERATE OUTPUT include/genex/$<CONFIG>/genex_config.h CONTENT
  12. "#ifndef GENEX_CONFIG_H
  13. #define GENEX_CONFIG_H
  14. #define GENEX_CONFIG_INCLUDE_DIR \"$<CONFIG>\"
  15. #endif /* GENEX_CONFIG_H */
  16. ")
  17. file(GENERATE OUTPUT include/intdir/$<CONFIG>/intdir_config.h CONTENT
  18. "#ifndef INTDIR_CONFIG_H
  19. #define INTDIR_CONFIG_H
  20. #define INTDIR_CONFIG_INCLUDE_DIR \"$<CONFIG>\"
  21. #endif /* INTDIR_CONFIG_H */
  22. ")
  23. foreach(g generatorlib generatorobj generator generated)
  24. target_compile_definitions(${g} PRIVATE
  25. "GENEX_CONFIG_DEFINITION=\"$<CONFIG>\""
  26. # FIXME Get this working
  27. # "INTDIR_CONFIG_DEFINITION=\"${CMAKE_CFG_INTDIR}\""
  28. )
  29. target_include_directories(${g} PRIVATE
  30. "${CMAKE_BINARY_DIR}/include/genex/$<CONFIG>"
  31. # FIXME Get this working
  32. # "${CMAKE_BINARY_DIR}/include/intdir/${CMAKE_CFG_INTDIR}"
  33. )
  34. endforeach()
  35. include(${CMAKE_CURRENT_LIST_DIR}/Common.cmake)
  36. generate_output_files(generatorlib generatorobj emptyobj generator generated)
  37. file(APPEND "${CMAKE_BINARY_DIR}/target_files.cmake" "set(GENERATED_FILES [==[${CMAKE_BINARY_DIR}/generated.c]==])\n")
  38. set(genfiles)
  39. foreach(cfg Debug Release MinSizeRel RelWithDebInfo)
  40. list(APPEND genfiles
  41. ${CMAKE_BINARY_DIR}/include/genex/${cfg}/genex_config.h
  42. ${CMAKE_BINARY_DIR}/include/intdir/${cfg}/intdir_config.h
  43. )
  44. endforeach()
  45. file(APPEND "${CMAKE_BINARY_DIR}/target_files.cmake" "set(CONFIG_FILES [==[${genfiles}]==])\n")