reklama

CMake - project dependency

Cmakesad

CMake - project dependency
« kdy: 16. 05. 2018, 20:40:10 »
Ahojte,

Zhanam fundovanu radu na dependency problem u Cmake.

Mam projekt A - lib, app - add_executable, add_library prepinam pomocou option z -D...
Mam projekt B - app - ma dependency na projekt A(lib), jednu cast kodu nastavujem cez option -D...

Mam projekt C - app, ten ma dependency na A(app, lib) a projekte B(app), avsak, do projektu "vsuva" CMAKE_C_FLAGS.

cele to skladam v CMakeLists cez ExternalProject_Add() ... Takze technicky v projekte C skladam projekt A, projekt B, jeho app, aj lib. Kazdopadne, aby cely system fungoval, tak A,B musia byt v projekte C.

Problem:
1) Okrem toho, ze neviem rozumne vyriesit dependency, aby sa mi 2x nestahoval projekt A (pre B aj C).
2) Tak som narazil na takmer pre mna neriesitelny problem: ak zmenit v projekte C - CMAKE_C_FLAGS napr -DLOG=0 na -DLOG=1, tak ExternalProject_Add(B ... -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} ...) sa nepremietne do B, a nepride ku rekompilacii kodu, coho vska chcem dosiahnut. K rekompilacii dojde iba v pripade ze sa v B zmeni source.

1) Ako mozem vyriesit to, ze ak pride k zmene C_FLAGS v projekte C, aby sa mi tato zmena prejavila aj v B. C aj B pouzivaju jednu cast kodu ktora je zavysla prave na hodnotach v preprocesore.

Diky.

reklama


Honza

Re:CMake - project dependency
« Odpověď #1 kdy: 17. 05. 2018, 00:12:26 »
Ano, takhle to fungovat nebude, ty definice je nutné přeposlat do toho externího projektu jinak.

Např. takto:
Kód: [Vybrat]
ExternalProject_Add(
...
...
CMAKE_ARGS -DCMAKE_C_FLAGS:string=${CMAKE_C_FLAGS}
)
Jde o to, že fáze configure proběhne pouze jednou, a následně si ten externí projekt žije sám vlastní životem, takže bude reagovat jen na změnu vlastního source, nebo změnu definic, které se změní v něm (což lze udělat např. ručně).
Různých řešení je ale asi více.

Cmakesad

Re:CMake - project dependency
« Odpověď #2 kdy: 17. 05. 2018, 19:14:41 »
Zial, nepomohlo :(.

Asi to nebude taky trivialny problem. Skusim pozriet vacsie projekty ako riesia application dependency.
V tomto mojom pripade, projekt C nema zmysel, ak nieje skompilovany projekt A,B. A tak isto, B musi mat rovnaky C_FLAGS ako projekt C.

Pouzivam verziu 5.1, podla oficialneho repa su na verzi 5.11, takze skusim este prekompilovatnajnovsi cmake ci to pomoze.

Diky za radu, skusim este prebruzdat na pipemail.

 

reklama