FindBISON¶
尋找 bison
執行檔並提供巨集以產生自訂建置規則。
此模組定義了以下變數
BISON_FOUND
如果找到程式則為真。
BISON_EXECUTABLE
bison
程式的路徑。BISON_VERSION
bison
的版本。
可以使用標準 CMake 語法指定 bison
的最低需求版本,例如 find_package(BISON 2.1.3)
。
如果找到 bison
,此模組會定義巨集
- bison_target¶
bison_target(<Name> <YaccInput> <CodeOutput> [OPTIONS <options>...] [COMPILE_FLAGS <string>] [DEFINES_FILE <file>] [VERBOSE [<file>]] [REPORT_FILE <file>] )
這將建立自訂規則以產生剖析器。<YaccInput>
是 yacc 檔案的路徑。<CodeOutput>
是 bison 產生的原始碼檔案名稱。也可以產生標頭檔,其中包含 token 列表。
變更於 3.14 版本: 當 CMP0088
設定為 NEW
時,bison
會在 CMAKE_CURRENT_BINARY_DIR
目錄中執行。
選項如下
OPTIONS <options>...
新增於 4.0 版本。
加入到
bison
命令列的分號分隔列表 選項。COMPILE_FLAGS <string>
自 4.0 版本起已棄用。
加入到
bison
命令列的空格分隔 bison 選項。;-列表 將無法運作。此選項已棄用,建議改用OPTIONS <options>...
。DEFINES_FILE <file>
新增於 3.4 版本。
指定要由
bison
產生的非預設標頭<file>
。VERBOSE [<file>]
告訴
bison
寫入語法和剖析器的報告檔案。自 3.7 版本起已棄用: 如果給定
<file>
,則指定報告檔案複製到的路徑。[<file>]
保留此選項是為了保持此模組的向後相容性。請使用VERBOSE REPORT_FILE <file>
。REPORT_FILE <file>
新增於 3.7 版本。
指定非預設報告
<file>
(如果產生)。
此巨集定義了以下變數
BISON_<Name>_DEFINED
如果巨集成功執行則為真。
BISON_<Name>_INPUT
輸入原始檔,
<YaccInput>
的別名。BISON_<Name>_OUTPUT_SOURCE
bison
產生的原始碼檔案。BISON_<Name>_OUTPUT_HEADER
bison
產生的標頭檔。BISON_<Name>_OUTPUTS
所有由
bison
產生的檔案,包含原始碼、標頭和報告。BISON_<Name>_OPTIONS
新增於 4.0 版本。
在
bison
命令列中使用的選項。BISON_<Name>_COMPILE_FLAGS
自 4.0 版本起已棄用。
在
bison
命令列中使用的選項。此變數已棄用,建議改用BISON_<Name>_OPTIONS
變數。
範例¶
find_package(BISON)
bison_target(MyParser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.cpp
DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/parser.h)
add_executable(Foo main.cpp ${BISON_MyParser_OUTPUTS})
可以將額外的命令列選項作為列表傳遞到 bison
執行檔。例如,加入 -Wall
選項以報告所有警告,以及 --no-lines
(-l
) 以不產生 #line
指令。
find_package(BISON)
if(BISON_FOUND)
bison_target(MyParser parser.y parser.cpp OPTIONS -Wall --no-lines)
endif()
產生器表達式可以用於 OPTIONS <options...
。例如,僅針對 Debug
建置類型加入 --debug
(-t
) 選項
find_package(BISON)
if(BISON_FOUND)
bison_target(MyParser parser.y parser.cpp OPTIONS $<$<CONFIG:Debug>:-t>)
endif()