2013-05-22 6 views
5

Ich versuche, Flex für ein Projekt zu verwenden, und ich versuche, CMake zu verwenden, um Flex mit meinem Projekt zu verknüpfen. Ich habe einen FindFLEX.cmake online gefunden, den ich dafür benutze. Sie können es here finden. Das sollte standardmäßig in CMake sein, aber ich glaube nicht, dass es so war. Meine Verzeichnisstruktur ist alsGet CMake, Flex unter Windows zu finden

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

/My src folgt CMakeLists.txt als

ist
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 von FindFLEX.cmake zur Verfügung gestellt werden soll folgt, wenn es das Paket Flex findet. Ausführen des folgenden Befehls in build/Verzeichnis didnt die Flex-Pakete

build> cmake ..\src 

Dann habe ich das Präfix finden und arbeitete teilweise

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

dass die ausführbare Datei flex.exe gefunden, aber nicht die Bibliothek. Die relevanten Teile FindFLEX.cmake wird unter

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

gezeigt, dass die Botschaft, die ich auf Cmake bekommen läuft

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! 

Kann mir jemand sagen, warum ich die Flex binäre bin zu finden, aber nicht die Bibliothek nach der einschließlich Vorwahlpfad? Jede Hilfe wäre willkommen.

Dank

+0

Geht es um das Adobe/Apache UI Framework Flex? ODER der Lexikalische Analysator? Oder etwas anderes namens Flex? – JeffryHouser

+0

Ich bin mir nicht sicher, ob das der relevante Teil von FindFLEX.cmake ist ... können Sie den Teil anzeigen, der versucht, die Bibliothek zu finden? Wie unterscheidet es sich von dem Teil, der die ausführbare Datei findet? – SethMMorton

+0

@ Reboog711: Es ist der Lexical Analyzer –

Antwort

3

Ich habe herausgefunden, was das Problem ist. Unter Windows sucht cmake nach libfl.lib. Aber die Windows-Installation von Flex bietet nur libfl.a Also brauchte ich diese beiden Zeilen zu meinem Cmake hinzufügen

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

Die erste Zeile ADSs .a zur Liste der Suffixe für Bibliotheken durchsucht, und die zweite Zeile sucht nach libfl . Das hat funktioniert