2017-10-02 2 views
0

In meiner Eltern CMakeLists.txt:Cmake SPIELE nicht funktioniert, wie ich denke, es sollte

set(PROGRAMS "CCHIF;CCWIF;FXTINT;FXTCLI") 

In meinem Kind CMakeLists.txt:

set (PROJ_LIST "CCHIF;FXTCLI") 
MESSAGE(STATUS "Programs is ${PROGRAMS}") 
foreach (PROJ ${PROJ_LIST}) 
if (";${PROJ};" MATCHES ";${PROGRAMS};") 
    project(${PROJ}) 
    add_executable(${PROJ} ${PROJ}.c) 
    target_link_libraries(${PROJ} LINK_PUBLIC pthread dl) 
    install(TARGETS ${PROJ} DESTINATION ${BIN_DIR}) 
endif() 
    Message (STATUS "${PROJ} is NOT in the programs list!!! **********") 
endforeach() 

Ausgabe von cmake ..

-- Programs is CCHIF;CCWIF;FXTINT;FXTCLI 
-- CCHIF is NOT in the programs list!!! ********** 
-- FXTCLI is NOT in the programs list!!! ********** 

Ich habe versucht mit und ohne die "; ....;" (Zitat/Semikolon) für die Argumente zu MATCHES. Ich habe MATCHES erfolgreich vorher benutzt. In diesem Fall funktioniert es nicht. Ich habe über 50 Unterprogramme, die ich für viele Seiten erstelle. Manche Seiten brauchen alle 50, manche nur einen Teil von ihnen. also würde ich gerne die Programme in die CMakeLists.txt der Eltern für jede Seite setzen. Dank

+0

Und Sie drucken die Meldung 'Message (STATUS„$ {PROJ} ist nicht in der Liste der Programme !!! ** ******** ")' in jedem Fall, auch wenn es übereinstimmt, weil es außerhalb des if-Blocks ist. Um zu sehen, ob es zu Ihnen passt, sollten Sie hinzufügen und sonst blockieren, um die if und die 'message()' in den Else-Block zu setzen. – fedepad

+2

Der String 'CCHIF' passt nicht zum regulären Ausdruck' CCHIF; CCWIF; FXTINT; FXTCLI'. Das Gegenteil ist jedoch der Fall: "CCHIF; CCWIF; FXTINT; FXTTCLI" entspricht dem regulären Ausdruck "CCHIF". – Tsyvarev

Antwort

1

ich wahrscheinlich die subcommand list(FIND) zu tun, um die gleiche Aufgabe verwenden würde:

cmake_minimum_required(VERSION 3.9) # put your version... 
set(PROGRAMS CCHIF CCWIF FXTINT FXTCLI) 
set(PROJ_LIST CCHIF FXTCLI JACK) # added JACK to see that it will not match any element in the list 
foreach(PROJ ${PROJ_LIST}) 
    list (FIND PROGRAMS ${PROJ} _index) 
    if(${_index} GREATER -1) 
     message("Project selected: ${PROJ} in programs list") 
     project(${PROJ}) 
     add_executable(${PROJ} ${PROJ}.c) 
     target_link_libraries(${PROJ} LINK_PUBLIC pthread dl) 
     install(TARGETS ${PROJ} DESTINATION ${BIN_DIR}) 
    else(${_index} GREATER -1) 
     message(STATUS "${PROJ} is NOT in the programs list!!! ******") 
    endif(${_index} GREATER -1) 
endforeach() 
Verwandte Themen