unitybuild_c_and_cxx_group.cmake 1.1 KB

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