2017-07-02 4 views
0

Ich versuche ein Makefile in CMakeLists.txt zu übersetzen.CMake mit Flex/Bison in CLion

Makefile, die

fb1-5: fb1-5.l fb1-5.y 
    bison -d fb1-5.y 
    flex fb1-5.l 
    cc -o [email protected] fb1-5.tab.c lex.yy.c -lfl 

CMakeLists.txt Versuch

cmake_minimum_required(VERSION 3.7) 
project(calc) 

set(CMAKE_C_STANDARD 99) 

FIND_PACKAGE(BISON REQUIRED) 
SET(BisonOutput ${CMAKE_SOURCE_DIR}/parser.c) 
IF(BISON_FOUND) 
    ADD_CUSTOM_COMMAND(
      OUTPUT ${BisonOutput} 
      COMMAND ${BISON_EXECUTABLE} 
      -d 
      ${CMAKE_SOURCE_DIR}/fb1-5.y 
      COMMENT "Generating parser.c" 
    ) 
ENDIF() 

FIND_PACKAGE(FLEX REQUIRED) 
SET(FlexOutput ${CMAKE_SOURCE_DIR}/scanner.c) 
IF(FLEX_FOUND) 
    ADD_CUSTOM_COMMAND(
      OUTPUT ${FlexOutput} 
      COMMAND ${FLEX_EXECUTABLE} 
      ${CMAKE_SOURCE_DIR}/fb1-5.l 
      COMMENT "Generating fb1-5.l" 
    ) 
ENDIF() 

ADD_LIBRARY(calc ${BisonOutput} ${FlexOutput}) 

Sie sagt, sie findet Bison und Flex in

-- Found BISON: /usr/bin/bison (found version "3.0.4") 
-- Found FLEX: /usr/bin/flex (found version "2.6.0") 

Aber mein CMake Skript nicht erzeugen ein Werk ausführbar. Wie soll ich "ausführbar" definieren und wie kann ich das CMake-Build-Skript in CLion arbeiten lassen?

+2

'Aber wie soll ich" ausführbare "' definieren - was ist falsch mit 'add_executable (fb1-5.tab.c lex.yy.c)'? 'Wie kann ich das CMake-Build-Skript in CLion arbeiten lassen?' - Was ist das Problem mit dem aktuellen Skript? Dokumentation für [FindFLEX] (https://cmake.org/cmake/help/v3.7/module/FindFLEX.html) hat ein schönes Beispiel für die Verwendung von Funktionen dieses Moduls (und von [FindBISON] (https: // cmake.org/cmake/help/v3.7/module/FindBISON.html)). Hast du dieses Beispiel überprüft? – Tsyvarev

Antwort

1

Aber mein CMake-Skript wird keine ausführbare Datei generieren. Wie soll ich "ausführbar" definieren und wie kann ich das CMake-Build-Skript in CLion arbeiten lassen?

Ich denke, man sollte zumindest etwas tun:

add_executable(fb1-5 
    ${BisonOutput} 
    ${FlexOutput} 
) 

add_executable See.