2013-05-22 2 views
5

Я пытаюсь использовать flex для проекта, и я пытаюсь использовать CMake для связи flex с моим проектом. Я нашел FindFLEX.cmake онлайн, который я использую для этого. Вы можете найти его here. По умолчанию это должно было быть в CMake, но я не думаю, что это так. Моя структура каталогов выглядит следующим образомПолучение CMake для поиска flex на Windows

root 
---src 
    ---CMakeLists.txt 
    ---cmake 
     ---Modules 
     ---FindFLEX.cmake 
---build 
---external 
    ---flex - Where flex is installed 
     ---bin 
     ---flex.exe 
     ---lib 
     ---libfl.a 

My SRC/CMakeLists.txt выглядит следующим образом

cmake_minimum_required(VERSION 2.8) 
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") 
message(${CMAKE_MODULE_PATH}) 
set(project_name "try_flex") 
message(${project_name}) 
project(${project_name}) 
find_package(FLEX) 
FLEX_TARGET(Mylexer tokenize.lex ${CMAKE_CURRENT_BINARY_DIR}/tokenize.cpp) 
add_executable(${project_name} ${FLEX_Mylexer_OUTPUTS}) 
target_link_libraries(${project_name} ${FLEX_LIBRARIES}) 

FLEX_TARGET должна быть предоставлена ​​FindFLEX.cmake, когда он находит пакет Flex. Запуск следующей команды в каталоге/сборок не нашел флекс пакеты

build> cmake ..\src 

Затем я добавил префикс и работал частично

build> cmake -DCMAKE_PREFIX_PATH=c:\root\external\flex\ ..\src 

, который нашел исполняемый flex.exe, но не библиотеку. Соответствующие части FindFLEX.cmake показано ниже

FIND_PROGRAM(FLEX_EXECUTABLE flex DOC "path to the flex executable") 
message("DEBUG:"${FLEX_EXECUTABLE}) 
MARK_AS_ADVANCED(FLEX_EXECUTABLE) 

FIND_LIBRARY(FL_LIBRARY NAMES fl DOC "path to the fl library") 
message("DEBUG:FL_LIBRARY"${FL_LIBRARY}) 
MARK_AS_ADVANCED(FL_LIBRARY) 
SET(FLEX_LIBRARIES ${FL_LIBRARY}) 

Сообщение я получаю о запуске CMake именно

DEBUG:c:/root/external/flex/bin/flex.exe 
DEBUG:FL_LIBRARYFL_LIBRARY-NOTFOUND 
CMake Error: The following variables are used in this project, but they are set to NOTFOUND. 
Please set them or make sure they are set and tested correctly in the CMake file s:FL_LIBRARY (ADVANCED) 
linked by target "try_flex" in directory C:/root/src 

-- Configuring incomplete, errors occurred! 

Может кто-нибудь сказать мне, почему я найти гибкий двоичный, но не библиотеку после включения префиксный путь? Любая помощь будет оценена по достоинству.

Thanks

+0

Это о Adobe/Apache UI Framework Flex? ИЛИ Лексический анализатор? Или что-то другое по имени Flex? – JeffryHouser

+0

Я не уверен, что это соответствующая часть FindFLEX.cmake ... можете ли вы показать часть, которая пытается найти библиотеку? Чем он отличается от той части, которая находит исполняемый файл? – SethMMorton

+0

@ Reboog711: это лексический анализатор –

ответ

3

Я понял, в чем проблема. В Windows cmake ищет libfl.lib. Но установка Окна Flex обеспечивает только libfl.a Таким образом, мне нужно, чтобы добавить эти две строки в моей CMake

LIST(APPEND CMAKE_FIND_LIBRARY_SUFFIXES ".a") 
FIND_LIBRARY(FL_LIBRARY NAMES libfl fl DOC "path to the fl library") 

Первая строка АДА .а в список суффиксов искали библиотек, а вторая строка выглядит для libfl , То, что сработало

Смежные вопросы