4

以下のようなディレクトリ構造のC++プロジェクトがあります。

server/
   code/
      BASE/
         Thread/
         Log/
         Memory/
      Net/
   cmake/
      CMakeList.txt
      BASE/
         CMakeList.txt
      Net/
         CMakeList.txt

ここに /cmake/CMakeList.txt の一部があります:

MACRO(SUBDIRLIST result curdir)
  FILE(GLOB children RELATIVE ${curdir} ${curdir}/*)
  SET(dirlist "")
  FOREACH(child ${children})
    IF(IS_DIRECTORY ${curdir}/${child})
        SET(dirlist ${dirlist} ${child})
    ENDIF()
  ENDFOREACH()
  SET(${result} ${dirlist})
ENDMACRO()

add_subdirectory(Base)

次に、/cmake/Base/CMakeList.txt でマクロを使用します。

SET(SUBDIR, "")
SUBDIRLIST(SUBDIRS, ${BASE_SRC_DIR})
message("SUBDIRS : " ${SUBDIRS})

出力: サブディレクトリ:

出力で ${dirlist} をチェックします。出力はマクロの値であり、期待されるディレクトリ リストを取得しますが、SET(${result} ${dirlist}) の後に message("result " ${result}) が発生すると、期待される出力を取得できません。 、私の CMakeLists.txt の何が問題になっていますか?

4

1 に答える 1

2

ここにはいくつかの小さな問題があります。

  1. マクロでSET(dirlist "")は、 SET(dirlist). 同様に、 (「 SET(SUBDIR, "")SUBDIR SET(SUBDIRS)」はタイプミスであり、「SUBDIRS」である必要があると思います。また、setコマンドにコンマは必要ありません-おそらく別のタイプミスですか?)
  2. ${result}マクロでの内容を出力するには、毎回でmessage("result: ${${result}}")はなく に追加${child}するため、 を使用します。あなたの例では、そうです。result${result}${result}SUBDIRS${${result}}${SUBDIRS}
  3. を呼び出すときSUBDIRLISTは、引数の間にコンマを使用しないでください。
  4. の値を出力するときは、引用符SUBDIRSを含めます${SUBDIRS}。つまり、message("SUBDIRS: ${SUBDIRS}")セミコロンの区切り文字が失われます。

それら以外は、マクロは問題ないようです。

于 2012-07-16T18:23:23.987 に答える