gen_sub_cmake.sh 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #! /bin/bash
  2. TARGET_FILE=$1
  3. SRC_LIST=$(for i in ${LIB_SRCS}; do
  4. echo ${i}|${SED} "s:${TOP_DIR}: \${PROJECT_SOURCE_DIR}:g"
  5. done)
  6. DIR_LIST=$(for i in ${LIB_SRCS}; do
  7. dirname ${i}|sed "s:${TOP_DIR}/*::g"
  8. done|sort -u)
  9. MOD_NAME=$(echo ${MODULE_NAME}|sed 's:/:_:g')
  10. rm -f ${TARGET_FILE}
  11. cat << EOB >> ${TARGET_FILE}
  12. $(for i in ${INTERNAL_INCLUDES} ${EXTERNAL_INCLUDES}; do
  13. if grep -q "$(basename ${OUTPUT_DIR})/usr/include" <<< "${i}"; then
  14. continue;
  15. fi
  16. echo $i \
  17. | ${SED} "s:-I${TOP_DIR}\(.*\):INCLUDE_DIRECTORIES (\${PROJECT_SOURCE_DIR}\1):g"
  18. done)
  19. EOB
  20. if echo ${CMAKE_EXPORT_LIBS} | grep -qw ${MODULE_NAME}; then
  21. TYPE="SHARED"
  22. else
  23. TYPE="OBJECT"
  24. fi
  25. if [ "${LIBA_TARGET}" != "" ]; then
  26. LNAME=${LIBA_TARGET#lib}
  27. LNAME=${LNAME%.a}
  28. cat << EOB >> ${TARGET_FILE}
  29. FILE (GLOB ${MOD_NAME}_SRCS
  30. $(for i in ${DIR_LIST}; do echo " \${PROJECT_SOURCE_DIR}/${i}/*.c"; done)
  31. )
  32. ADD_LIBRARY (${LNAME} ${TYPE}
  33. \${${MOD_NAME}_SRCS}
  34. \${EXTRA_C_SOURCES}
  35. )
  36. EOB
  37. fi
  38. #
  39. # We do NOT compose ADD_TARGET and TARGET_LINK_LIBRARY segment for those
  40. #
  41. if grep -qw "${MODULE_NAME}" <<< "${NOEXEC_CMAKE_DIRS}"; then
  42. exit 0
  43. fi
  44. TARGET_COUNT=$(echo "${TARGET}" | awk '{ print NF }')
  45. if (( TARGET_COUNT == 1 )); then
  46. if grep -qw ${TARGET} <<< ${WIN32_CMAKE_SKIP}; then
  47. echo "IF (NOT WIN32)" >> ${TARGET_FILE}
  48. fi
  49. cat << EOB >> ${TARGET_FILE}
  50. ADD_EXECUTABLE (${TARGET}
  51. $(for i in ${SRCS}; do
  52. echo ${i} | ${SED} "s:${TOP_DIR}: \${PROJECT_SOURCE_DIR}:g"
  53. done)
  54. )
  55. $(for i in \
  56. $(echo ${LDFLAGS} | grep -o '\-l[^ ]*' | sort -u | sed 's:^-l::g'); do
  57. if [ "${i}" = "pthread" -o "${i}" = "rt" ]; then echo "IF (NOT MSVC)"; fi
  58. echo "TARGET_LINK_LIBRARIES (${TARGET} ${i})"
  59. if [ "${i}" = "pthread" -o "${i}" = "rt" ]; then echo "ENDIF (NOT MSVC)"; fi
  60. done)
  61. EOB
  62. if grep -qw ${TARGET} <<< ${WIN32_CMAKE_SKIP}; then
  63. echo "ENDIF (NOT WIN32)" >> ${TARGET_FILE}
  64. fi
  65. echo "" >> ${TARGET_FILE}
  66. fi
  67. if (( TARGET_COUNT > 1 )); then
  68. cat << EOB >> ${TARGET_FILE}
  69. $(for i in ${TARGET}; do
  70. if echo ${WIN32_CMAKE_SKIP} | grep -qw ${i}; then
  71. echo "IF (NOT WIN32)"
  72. fi
  73. echo "ADD_EXECUTABLE (${i}"
  74. j=${i//-/_}
  75. k=$(eval echo '${''SRCS_'"${j}"'}')
  76. for v in ${k}; do
  77. echo " ${v}"
  78. done
  79. echo ")"
  80. if echo ${WIN32_CMAKE_SKIP} | grep -qw ${i}; then
  81. echo "ENDIF (NOT WIN32)"
  82. fi
  83. done)
  84. $(for i in ${TARGET}; do
  85. if echo ${WIN32_CMAKE_SKIP} | grep -qw ${i}; then
  86. echo "IF (NOT WIN32)"
  87. fi
  88. echo "TARGET_LINK_LIBRARIES (${i} ${COMP_LIB_NAME})"
  89. for j in $(echo ${LDFLAGS} | grep -o '\-l[^ ]*' | sort -u | sed 's:^-l::g' | grep -vw ${COMP_LIB_NAME}); do
  90. if [ "${j}" = "pthread" -o "${j}" = "rt" ]; then echo "IF (NOT MSVC)"; fi
  91. echo "TARGET_LINK_LIBRARIES (${i} ${j})"
  92. if [ "${j}" = "pthread" -o "${j}" = "rt" ]; then echo "ENDIF (NOT MSVC)"; fi
  93. done
  94. if echo ${WIN32_CMAKE_SKIP} | grep -qw ${i}; then
  95. echo "ENDIF (NOT WIN32)"
  96. fi
  97. echo ""
  98. done)
  99. SET (EXECUTABLE_OUTPUT_PATH ../out)
  100. EOB
  101. fi