Generator expressions

0

chcialbym aby cmake dodal biblioteki do projektu i robie to za pomoca generator expressions

ten kawalek cmake dziala dla 3.25.1 a nie dziala dla 3.22.1

troche mnie to dziwie i nie wiem dlaczego

target_link_libraries(${PROJECT_NAME} 
   $<$<BOOL:${UNIX}>: dl pthread m>
   #$<$<NOT:$<PLATFORM_ID:Windows>>:dl pthread m>
)
1
Adamek Adam napisał(a):

ten kawalek cmake dziala dla 3.25.1 a nie dziala dla 3.22.1

A "nie działa" to znaczy?

0

cmake generuje kod ktory sie nie kompiluje
w cmake starszym 3.22.1 wynikiem $<$<BOOL:${UNIX}>: dl pthread m>
powinno byc -ldl -lpthread -lm
a zamiast jest $<1: -ldl -lpthread -lm>

testowalem generator ninja oraz make

max@max-UX430UA:~/development/gity/4p_365268/b$ make
[ 25%] Building CXX object libki/CMakeFiles/libki.dir/test.cpp.o
[ 50%] Linking CXX static library liblibki.a
[ 50%] Built target libki
[ 75%] Building CXX object apps/CMakeFiles/concurrency_examples.dir/main.cpp.o
[100%] Linking CXX executable concurrency_examples
/usr/bin/ld: cannot find $<1:: No such file or directory
/usr/bin/ld: cannot find -lm>: No such file or directory
/usr/bin/ld: cannot find -lm>: No such file or directory
collect2: error: ld returned 1 exit status
make[2]: *** [apps/CMakeFiles/concurrency_examples.dir/build.make:98: apps/concurrency_examples] Error 1
make[1]: *** [CMakeFiles/Makefile2:142: apps/CMakeFiles/concurrency_examples.dir/all] Error 2
make: *** [Makefile:91: all] Error 2

kompletny projekt https://github.com/mariuszmaximus/4p_365268

1

odnośnie mojego komentarza
doc z 3.0
https://cmake.org/cmake/help/v3.0/manual/cmake-generator-expressions.7.html
masz dział logical expression

$<1:...>
Content of ...

doc aktualny
w ogóle tego nie ma. nie traktuj cmake jako coś gdzie masz jakąś niezbywalną kompatybilność z starymi wersjami. On racze ewoluuje.

0

@revcorey dziękuje za linka , zapomniałem o tym ze mogę się przełączyć w dokumentacji cmake pomiędzy wersjami

to co użyłem weszło w 3.24

1
revcorey napisał(a):

w ogóle tego nie ma. nie traktuj cmake jako coś gdzie masz jakąś niezbywalną kompatybilność z starymi wersjami. On racze ewoluuje.

Raczę się nie zgodzić. Pierwsza standardowa linijka w CMakeLists.txt:

cmake_minimum_required(VERSION 3.15)

Definiuje zachowanie cmake zgodne z daną wersją.
Jeśli nie zmienisz tej linijki, to nowsze wersje cmake bedą zachowywać się po staremu (chyba, że są jakieś wyjątkowy bugfix) tak długo jak nie zmienisz tam wersji.

Jest nawet opcja używania nowszej wersji zachowania cmake, ale w jakimś punkcie przewrócenia starszego zachowania, przez wykorzystanie cmake_policy.

1

@MarekR22 na moje oko to cmake zachowuje sie trochę inaczej niż napisałeś

cmake_minimum_required(VERSION 3.15) Definiuje zachowanie cmake zgodne z daną wersją.
Jeśli nie zmienisz tej linijki, to nowsze wersje cmake bedą zachowywać się po staremu (chyba, że są jakieś wyjątkowy bugfix) tak długo jak nie zmienisz tam wersji.Dodaj cytat...

Prosty test. W cmake 3.25 pojawiło się block

mam cmake_minimum_required(VERSION 3.0.0) i jak użyję ostatniej wersji cmake to funkcja block działa

1
Adamek Adam napisał(a):

Prosty test. W cmake 3.25 pojawiło się block

mam cmake_minimum_required(VERSION 3.0.0) i jak użyję ostatniej wersji cmake to funkcja block działa

Dokumentacja pisze, że cmake_minimum_required konfiguruje policy zgodne z daną wersją.
Najwyraźniej jak dodają nowy feature to jest on pozbawiony flagi policy, ergo dostajesz go bez względu na wymuszą wersję.
Policy jest dodawana, gdy intestacy feature jest poprawiany.

Szczerzę powiedziawszy uważam to za niedopatrzenie kitware. Feature niedostępny w wersji minimalnej powinien powodować błąd lub przynajmniej warning.

0

Chwila chwila to to nie działa tak, że minimum required oznacza tyle, że minimalna wersja to ta podana, ale śmiało można używać nowszej? Natomiast nie starszej?

Jeżeli nie to czemu w nazwie jest użyte "minimum"?

1 użytkowników online, w tym zalogowanych: 0, gości: 1