Antlr4 с C ++ и CMake - PullRequest
       19

Antlr4 с C ++ и CMake

0 голосов
/ 26 апреля 2018

Я пытаюсь использовать antlr4 с C ++. У меня есть следующий CMakeLists.txt в моем корневом каталоге:

cmake_minimum_required(VERSION 3.10)
project(demo VERSION 0.1 DESCRIPTION "demo")

include_directories(${CMAKE_CURRENT_BINARY_DIR})

set(CMAKE_CXX_STANDARD 17)
#############################################################################
# ANTLR SPECIFIC CMAKE COMMANDS
# This is derived from: https://github.com/blorente/antlr-4.7-cpp-cmake-base
#############################################################################
# Set the ocation of the JAR.
set(ANTLR4CPP_JAR_LOCATION ${CMAKE_SOURCE_DIR}/antlr/jar/antlr.jar)

# Add external build for antlrcpp.
include (${CMAKE_SOURCE_DIR}/antlr/runtime/ExternalAntlr4Cpp.cmake)

# add antrl4cpp artifacts to project environment.
include_directories( ${ANTLR4CPP_INCLUDE_DIRS} )
link_directories( ${ANTLR4CPP_LIBS} )
# message(WARNING "Found antlr4cpp libs: ${ANTLR4CPP_LIBS} and includes: ${ANTLR4CPP_INCLUDE_DIRS} ")

# Build the lexer/parser .h/.cpp files off the g4 grammar files.
antlr4cpp_process_grammar(demo demoparser
    ${CMAKE_SOURCE_DIR}/grammar/DemoLexer.g4
    ${CMAKE_SOURCE_DIR}/grammar/DemoParser.g4)

# include the generated files from the grammar/lexer.
include_directories(${antlr4cpp_include_dirs_demoparser})
#############################################################################

# Build demo
add_executable(demo main.cpp ${antlr4cpp_src_files_demoparser})
# Add dependencies for antlr
add_dependencies(demo antlr4cpp antlr4cpp_generation_demoparser)
target_link_libraries(demo antlr4-runtime)

Я более или менее скопировал пример из: "официального" учебника по cmake / antlr . Для краткости я опустил содержание include (${CMAKE_SOURCE_DIR}/antlr/runtime/ExternalAntlr4Cpp.cmake)

Итак, все файлы в одной структуре, кроме фляги. Я просто включаю его как файл проекта, и, как вы можете видеть из команды set(ANTLR4CPP_JAR_LOCATION), он находится там, где я хочу.

Когда я строю это, я получаю эту ошибку:

dyld: Library not loaded: libantlr4-runtime.4.7.1.dylib
Referenced from: /path/to/demo/cmake-build-debug/demo
Reason: image not found

Однако, когда я заглядываю в: /path/to/demo/cmake-build-debug/external/antlr4cpp/lib/, я вижу файл libantlr4-runtime.4.7.1.dylib, на который нужно ссылаться с помощью команды target_link_libraries(demo antlr4-runtime). Там также есть статические библиотеки.

Я что-то упустил? Почему CMake не находит статические файлы или файлы dylib, которые он должен?

1 Ответ

0 голосов
/ 28 мая 2018

Прямо перед тем, как начать, я не осознавал, что бегу brew install antlr4-cpp-runtime. Который установил заголовки на путь. Я сделал это на моей машине, но не на других машинах, которые строят этот проект. Проблема в том, почему она не является детерминированной, если среда выполнения не установлена. Но он работает сразу после установки среды выполнения.

...