Cmake import/include definitions

CmakeBojovnik

Cmake import/include definitions
« kdy: 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


Honza

Re:Cmake import/include definitions
« Odpověď #1 kdy: 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>)

Jano

Re:Cmake import/include definitions
« Odpověď #2 kdy: 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

Jano

Re:Cmake import/include definitions
« Odpověď #3 kdy: 31. 08. 2017, 14:07:55 »
preklep: target_compile_definitionS

dolezite je klucove slovo PUBLIC v TargetA