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
Si tratta di Adobe/Apache UI Framework Flex? O l'analizzatore lessicale? O qualcosa di diverso chiamato Flex? – JeffryHouser
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
@ Reboog711: è l'analizzatore lessicale –