Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: CmakeBojovnik 31. 08. 2017, 10:26:15

Název: Cmake import/include definitions
Přispěvatel: CmakeBojovnik 31. 08. 2017, 10:26:15
Ahoj, bojujem trocha s Cmake ohladne importu/include COMPILE_DEFINITIONS a potreboval by som poradit...

Mam prvy CmakeList A/CmakeList.txt ktory obsahuje
<root>/A/CmakeList.txt
Kód: [Vybrat]
    add_definitions(-DDEF_AA)
    add_definitions(-DDEF_AB)
    add_definitions(-DDEF_AC)
    ...
    add_library(TargetA STATIC ... )
   vygeneruje mi to libTargetA.a , coz je to co chcem

A teraz druhy CmakeList, kde mam
<root>/B/CmakeList.txt
Kód: [Vybrat]
    add_definitions(-DDEF_BA)
    add_definitions(-DDEF_BB)
    add_definitions(-DDEF_BC)
    ...
    add_executable(TargetB ... )
    target_link_libraries(TargetB ... TargetA)

Target A buildim zvlast, pripadne do targat B dam execute_process, ale o co sa mi jedna.
Pri kompilacii TargetB potrebujem zahrnut COMPILE_DEFINITIONS z TargetA. Zial, nepodarilo sa mi dohladat ako, cez include/get_properies sa mi to nedari, prosim o nasmerovanie, pripadne help

Diky,
Bojovnik
Název: Re:Cmake import/include definitions
Přispěvatel: Honza 31. 08. 2017, 12:13:14
Tohle by mělo fungovat, ale nezkoušel jsem:
Kód: [Vybrat]
target_compile_definitions(TargetB PUBLIC $<TARGET_PROPERTY:TargetA,COMPILE_DEFINITIONS>)
Název: Re:Cmake import/include definitions
Přispěvatel: Jano 31. 08. 2017, 14:06:03
V root/A/Cmakelist.txt:

Kód: [Vybrat]
add_library(TargetA STATIC ...)
target_compile_definition(TargetA PUBLIC DEF_AA DEF_AB DEF_AC)

V root/B/Cmakelist.txt:

Kód: [Vybrat]
add_executable(TargetB)
target_compile_definition(TargetB PRIVATE DEF_BA DEF_BB DEF_BC)
target_link_libraries(TargetB PRIVATE TargetA)

https://cmake.org/cmake/help/v3.9/command/target_compile_definitions.html
https://cmake.org/cmake/help/v3.9/command/target_link_libraries.html
Název: Re:Cmake import/include definitions
Přispěvatel: Jano 31. 08. 2017, 14:07:55
preklep: target_compile_definitionS

dolezite je klucove slovo PUBLIC v TargetA