2013-05-22 12 views
5

Sto provando a usare flex su un progetto e sto cercando di utilizzare CMake per collegare flex al mio progetto. Ho trovato un FindFLEX.cmake online che sto usando per questo. Lo puoi trovare here. Questo doveva essere in CMake di default, ma non penso che lo fosse. La mia struttura di directory è la seguenteOttenere CMake per trovare il flex su Windows

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

mio src/CMakeLists.txt è la seguente

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 dovrebbe essere fornito da FindFLEX.cmake quando trova il pacchetto Flex. L'esecuzione del seguente comando in build/directory fatto trovare i pacchetti flessibili

build> cmake ..\src 

poi ho aggiunto il prefisso e che ha funzionato parzialmente

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

che trova il flex.exe eseguibile, ma non la libreria. Le porzioni rilevanti della FindFLEX.cmake Di seguito riportiamo

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}) 

Il messaggio che ricevo a correre 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! 

qualcuno potrebbe dirmi il motivo per cui mi sto trovando il binario flessibile, ma non la libreria dopo compreso il percorso prefisso? Qualsiasi aiuto sarebbe apprezzato.

Grazie

+0

Si tratta di Adobe/Apache UI Framework Flex? O l'analizzatore lessicale? O qualcosa di diverso chiamato Flex? – JeffryHouser

+0

Non sono sicuro che sia la parte rilevante di FindFLEX.cmake ... puoi mostrare la parte che tenta di localizzare la libreria? In che modo è diverso da quella parte che individua l'eseguibile? – SethMMorton

+0

@ Reboog711: è l'analizzatore lessicale –

risposta

3

Ho capito qual è il problema. Su Windows, cmake sta cercando libfl.lib. Ma l'installazione di Windows di Flex fornisce solo libfl.a Quindi avevo bisogno di aggiungere queste due righe alla mia CMake

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

La prima linea ADS .a alla lista dei suffissi cercato per le biblioteche, e la seconda linea cerca libfl . Ciò ha funzionato