unitybuild_c_and_cxx_group.cmake 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. project(unitybuild_c_and_cxx C CXX)
  2. set(srcs f.c)
  3. foreach(s RANGE 1 8)
  4. set(src_c "${CMAKE_CURRENT_BINARY_DIR}/s${s}.c")
  5. file(WRITE "${src_c}" "
  6. int f(int);\n
  7. int s${s}(void) { return f(${s}); }\n"
  8. )
  9. set(src_cxx "${CMAKE_CURRENT_BINARY_DIR}/s${s}.cxx")
  10. file(WRITE "${src_cxx}" "
  11. extern \"C\" { \n
  12. int f(int); \n
  13. }\n
  14. int s${s}(void) { return f(${s}); }\n"
  15. )
  16. list(APPEND srcs "${src_c}")
  17. list(APPEND srcs "${src_cxx}")
  18. endforeach()
  19. add_library(tgt SHARED ${srcs})
  20. set_target_properties(tgt PROPERTIES UNITY_BUILD ON
  21. UNITY_BUILD_MODE GROUP
  22. #UNITY_BUILD_BATCH_SIZE will be ignored
  23. UNITY_BUILD_BATCH_SIZE 2)
  24. set_source_files_properties(s1.c s2.c s3.c s4.c
  25. s1.cxx s2.cxx s3.cxx s4.cxx
  26. PROPERTIES UNITY_GROUP "a"
  27. )
  28. set_source_files_properties(s5.c s6.c s7.c s8.c
  29. s5.cxx s6.cxx s7.cxx s8.cxx
  30. PROPERTIES UNITY_GROUP "b"
  31. )