CMake undermapper afhængighed

Jeg er meget ny til CMake. I virkeligheden, jeg forsøger det gennem Kdevelop4 hos C++.

Jeg har for vane at skabe subdirs for hver namespace, jeg skaber, selv hvis alle kilder skal være udarbejdet og knyttet til en enkelt eksekverbar. Godt, når jeg opretter en mappe under kdevelop, så er det opdateringer CMakeLists.txt med en add_subdirectory kommando og skaber en ny CMakeLists.txt i henhold til det, men det alene gør ikke tilføje kilder i henhold til den til udarbejdelse liste.

Har jeg rod CMakeLists.txt som følger:

 
projektet(gear2d) 

add_executable(gear2d object.cc main.cc) 

add_subdirectory(komponent) 

Under component/jeg har de kilder, jeg ønsker at være udarbejdet og knyttet til at producere gear2d eksekverbare filer. Hvordan kan jeg opnå det?

CMake FAQ har dette posten, men hvis det er det svar, jeg vil hellere bo med almindelig Makefiler.

Er der en måde at gøre dette på?

OriginalForfatteren Leonardo | 2011-04-12

1 svar

  1. 17

    Tilføje en undermappe ikke gøre meget mere end at angive, at CMake, at det skal gå ind i den mappe og se efter en anden CMakeLists.txt der. Du stadig nødt til at oprette et bibliotek med kilde-filer med add_library og knytte det til din eksekverbare med target_link_libraries. Noget i retning af følgende:

    I subdir CMakeLists.txt

    set( component_SOURCES ... ) # Add the source-files for the component here
    # Optionally you can use file glob (uncomment the next line)
    # file( GLOB component_SOURCES *.cpp )below
    
    add_library( component ${component_SOURCES} )
    

    Top-dir CMakeLists.txt

    project( gear2d )
    add_subdirectory( component )
    add_executable( gear2d object.cc main.cc )
    target_link_libraries( gear2d component )
    
    Det gjorde det! Tak meget. Jeg havde ikke begreb om, hvad et bibliotek, hjælp, i virkeligheden, hvad jeg forventede bare at tilføje kilder i subdir CMakeListrs.txt ligesom det blev gjort i roden, med add_executable. Tak igen.
    Dette dybest set tilføjer en ny (bibliotek) mål. Selv om dette mål ikke få knyttet sig selv, problemer der kan opstå senere, når indstillingen comiler flag eller andre ting… Bedre svar er her: stackoverflow.com/questions/8934295/…
    Jeg enige om, at det nye bibliotek mål. For convencience, jeg skummet over “, som er knyttet til en enkelt eksekverbar fil” og ønskede blot at antyde på en anden metode til at distribuere kilde-filer over mapper og biblioteker.
    Du sir, sætte en stopper for at banke mit hoved mod væggen. Tak skal du have.
    Jeg vil gerne tilføje, at forslaget om at omdøbe subdir ‘komponent’ i det eksempel, at ‘componentdir’. Bare for at gøre det klart, at target_link_libraries forventer, at target navn “komponent” fra i subdir s CMakeLists.txt. Da dette er mindst 3rd sted på nettet, hvor jeg fandt eksempler med samme navne for subdir og link-elementet, fik jeg en smule forvirret og var nødt til at prøve det selv… (hvis det er måske den subdir navn vil også arbejde for target_link_libraries – men det betyder ikke, ved den måde, du kan heller ikke bruge en ${…} alias, der er defineret i subdir…)

    OriginalForfatteren André

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *