2013-05-22 15 views
5

Bir projede esnek kullanmaya çalışıyorum ve projemle esnek bağlantı kurmak için CMake kullanmaya çalışıyorum. Bunun için kullanıyorum bir FindFLEX.cmake çevrimiçi buldum. here'u bulabilirsiniz. Bu varsayılan olarak CMake içinde olması gerekiyordu, ama sanmıyorum.Windows'da esnek bulmak için CMake'i kullanmaya başlama

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 o Flex paketi bulduğunda FindFLEX.cmake tarafından sağlanacak gerekiyordu şöyle/CMakeLists.txt olduğunu

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

Benim src aşağıdaki gibi Benim dizin yapıdır. build/dizininde aşağıdaki komutu Koşu esnek paketler bulamadık

build> cmake ..\src 

Sonra önek eklenmiş ve o kütüphaneyi kısmen yürütülebilir flex.exe bulundu
build> cmake -DCMAKE_PREFIX_PATH=c:\root\external\flex\ ..\src 

çalıştı ama. FindFLEX.cmake ilgili kısımları

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

aşağıdaki I cmake çalıştıran olsun mesajı olduğu gösterilmiştir

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! 

ben dahil sonra esnek ikili değil kütüphane bulma am neden kimse bana söyleyebilir misiniz önek yolu? Herhangi bir yardım takdir edilecektir.

Teşekkürler

+0

çalıştı Bu, Adobe/Apache UI Framework Flex hakkında mı? VEYA Lexical Analyzer? Ya da Flex adlı farklı bir şey? – JeffryHouser

+0

FindFLEX.cmake dosyasının ilgili kısmı olduğundan emin değilim ... kütüphaneyi bulmaya çalışan kısmı gösterebilir misiniz? Yürütülebilir dosyayı bulmak o bölümden nasıl farklıdır? – SethMMorton

+0

@ Reboog711: Bu Lexical Analyzer –

cevap

3

Sorunun ne olduğunu anladım. Windows'da, cmake libfl.lib'yi arıyor. Ama Flex Windows yükleme Ben ilk satırı soneklerinin listesine .a kütüphaneler aramış Adss ve ikinci satır libfl arar

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

benim cmake Bu iki satırı eklemek için gerekli tek Yani libfl.a sağlar . Bu,