asdxmee
asdxmee
Mam strukturę plików zorganizowana w taki sposób że foldery mają w sobie cmakelists.txt, pliki cpp i pliki header. Chciałbym zrobić tak żeby pliki header były inckudowalne przez #include<nazwafolderu/nazwaheadera>. Próbowałem w cmakelists danego folderu zrobić

addlibrary(nazwafolderu ...)
targetincludedirectories(nazwafolderu ${CMAKECURRENTSOURCEDIR})

Niestety to nie działa. W tutorialach na internecie widziałem że ludzie tworzą podfoldery include I tam
0
  • Najlepsze
  • Wszystkie komentarze
Tytanowy
W add library na pierwszym miejscu podajesz nazwę targetu, a później konkretne pliki. Analogicznie w target include directories, najpierw podajesz nazwę targetu do którego chcesz podpiąć includy.

Generalnie to wszystko zależy od tego co chcesz osiągnąć. Jeżeli to nie są nagłówki publiczne, to nie ma potrzeby wydzielać ich i mogą znajdować się w katalogu ze źródłami. Wtedy możesz je "includować" z tylko z generatorem $<BUILD INTERFACE: jak w dokumentacji: https://cmake.org/cmake/help/latest/command/target_include_directories.html

Jeśli nie
1
H4RRY
@asdxmee: Tak, jest to dosyć standardowy schemat organizacji kodu. Każdy moduł ma swój interfejs (w twoim przypadku include) oraz src w któym jest prywatny kod dla modułu.
1
Parseval
Hey,

Ostatnio podczas pisania unit testów naszło mnie na refleksje i mam przeczucie, że spierniczyłem design projektu, ale do rzeczy. Stworzyłem strukturę gdzie foldery są podzielone na funkcjonalności, a w każdym takim folderze są pliki źródłowe i CMakeLists tworzący z nich bibliotekę, która linkowana jest do głównego targetu projektu. Załóżmy, że istnieje klasa MqttClient i klasa MqttConnection, która impelemntuje interfejs. W unit testach tworzę mocka tego interfejsu co jest oczywiste, ale pojawia
2
  • Najlepsze
  • Wszystkie komentarze
zibizz1
zibizz1
@Parseval: Przecież to oczywiste ze jak inne projekty mają korzystac z interfejsów to powinny one byc w osobnym projekcie.

Implementacja -> Interfejsy <- Testy
1
Saly
MqttClient i klasa MqttConnection, która impelemntuje interfejs. W unit testach tworzę mocka tego interfejsu co jest oczywiste, ale pojawia się problem, żeby do głównego targetu testów dolinkować wcześniej wspomnianą bibliotekę z uwagi na to, że ona kompiluje implementację tego interfejsu czego w testach być nie powinno.


@Parseval: nie ma czegoś takiego, że "w testach tego być nie powinno". Testujesz tak jak uważasz, że jest stosownie. Testowanie interfejsu, który w 100%
1
R.....y
R.....y
Treść przeznaczona dla osób powyżej 18 roku życia...
4
  • Najlepsze
  • Wszystkie komentarze
Passer93
@RedveKoronny: Po pierwsze to https://cliutils.gitlab.io/modern-cmake/

Po drugie to "Professional CMake: A Practical Guide".

A po trzecie to https://blog.feabhas.com/2021/07/cmake-part-1-the-dark-arts/
6
Krolik
Krolik
@RedveKoronny: Po co ludzie piszący w C++ muszą mieć system budowania projektu oparty o język skryptowy kompletny w sensie Turinga, i dodatkowo tak fatalny jak ten DSL w CMake? Dlaczego wszystkie inicjatywy napisania kolejnego systemu budowania dla C++ kończą się takim przekombinowaniem, że robi się z tego cały nowy język programowania? Zastanawiam się, czy to nie jest jakaś forma masochizmu. Tak jak by nie można było oprzeć budowania projektu na
5
AbyssWatcher2137
Treść przeznaczona dla osób powyżej 18 roku życia...
0
  • Najlepsze
  • Wszystkie komentarze
Parseval
@AbyssWatcher2137: Ale #cmake to Ty szanuj. Polecam do PATH dodać ścieżkę do kompilatora, a następnie zapoznać się z: https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html
Tworzysz plik z toolchainem według instrukcji z podanego linku, a później wołasz cmake'a z parametrem -DCMAKE_TOOLCHAIN_FILE=
1
blend
@AbyssWatcher2137: w-----ć go na zawsze i przerzucić się na c#
1
Parseval
Zrobiłem cross-compile programu używając CMake i ustawiając RPATH, żeby binarka szukała dynamicznych bibliotek .so w konkretnej ścieżce pomijając domyślną ścieżkę /usr/lib. Wstępnie wszystko jest dobrze, bo biblioteki są znajdowane z wyjątkiem jednej. Co ciekawe ustawienie LD LIBRARY PATH na tę samą ścieżkę co RPATH pomaga. Macie pomysł dlaczego tak się dzieje?

CMake: https://pastebin.com/XXWB9Xbb

#linux #programowanie #programista15k #programowanie #cpp #cmake
0
  • Najlepsze
  • Wszystkie komentarze
codeasap-pl
codeasap-pl
2
Parseval
@codeasap-pl dzięki, pierwszy link już prześledziłem, ale możliwe, że z drugiego i z mana coś jeszcze wyciągnę.
Dziwi mnie jednak fakt, że ustawienie RPATH pozwala na znalezienie niektórych bibliotek, a jedna biblioteka mimo, że siedzi w tym samym folderze z pozostałymi jest niewykrywana. Wygląda mi na to, że ustawienie ld library path naprawia problem, bo wspomniana biblioteka, która jest niewykrywana jest zależnością dla innej biblioteki, która nie widzi RPATH co jest
0
Parseval
Cześć,

Robię cross-compilację programu na urządzenie z ARMową architekturą. Problem polega na tym, że libki, które używa program leżą sobie na docelowym urządzeniu, a na hoście ich nie mam. Libek (.so) i zależności pomiędzy nimi jest bardzo dużo, a chciałbym uniknąć ich przerzucania na swoją maszynę lub cross-compilacji. Wiem, że da się linkerowi powiedzieć, żeby ignorował "unresolved-symbols", ale chciałbym to jakoś ładniej rozwiązać. Stąd pytanie:
Czy da się powiedzieć linkerowi, że przy
2
  • Najlepsze
  • Wszystkie komentarze
dixieman
dixieman
jest tu jakiś specalista od cmake? Mam mały problem do rozwiązania z którym nie mogę sobie poradzić. Oczywiście zapłacę
#cmake
#cpp
0
  • Najlepsze
  • Wszystkie komentarze
Parseval
Siema,

Mam klasę X, w zakresie której tworzony jest obiekt klasy Y. Ze względu na unit testy, które będą puszczane na maszynie o innej architekturze potrzebuję podmienić implementację klasy Y tworząc jakiegoś stuba. Jedyną rzeczą jaką chciałbym zmienić w kodzie, to stworzenie interfejsu dla klasy Y, a na etapie kompilacji pod unit testy podmieniać tylko plik źródłowy. Żeby to wszystko ogarnąć, trzeba stworzyć 3 headery (InterfaceY.hpp, Y.hpp i YStub.hpp) i dwa pliki
0
  • Najlepsze
  • Wszystkie komentarze
Parseval
Cześć,

Mam program, który posiada część real-time i non-real-time. Używam systemu czasu rzeczywistego Xenomai (pod #linux). Sam Xenomai ma wrappery dołączane linkerem, które nadpisują wszystkie klasyczne funkcje linuxowe. Mój program składa się z wielu bibliotek z czego jedna powinna mieć owrappowane funkcje. Niestety dołączenie flag linkera dla tej biblioteki powoduje owrappowanie funkcji całego projektu. Co robię źle, że nie zostaje to rozdzielone?

CMake dla tej biblioteki: https://pastebin.com/qsFwmBgV
Część CMake projektu - dołączenie
2
  • Najlepsze
  • Wszystkie komentarze
Krall
Ktoś umie zrobić Makefile pod SFMLa? Tak sobie wymyślili do projektu na studia. ;_;

#programista15k #programowanie #cpp #makefile #visualstudio #cmake
0
  • Najlepsze
  • Wszystkie komentarze
Babooco
Wiecie Mirki jak sprawić żeby Eclipse indeksował pliki z projektu, który budowany jest z cmake?

#eclipse #programowanie #cpp #cmake #linux
0
  • Najlepsze
  • Wszystkie komentarze
Sedd
Jakie książki albo źródła internetowe polecacie do poznania CMake? Z tego co się zorientowałem to na zrobienie każdej rzeczy są co najmniej 3 różne sposoby a sama dokumentacja nie zawsze wszystko dokładnie objaśnia.
#cpp #cmake
2
  • Najlepsze
  • Wszystkie komentarze
zwei
#macos #cmake #python #virtualenv

Jak zrobić, żeby cmake find_package(Python3 3.4) znajdował mi pythona z virtualenva? Teraz bierze mi z /usr/local/bin :/
0
  • Najlepsze
  • Wszystkie komentarze
f.....6
f.....6
Próbuję ogarnąć projekt w #cpp z użyciem #cmake i mam problem z podpięciem #sfml. Jakiś czas temu zmienił się sposób łączenia tej biblioteki i nie podłącza się już FindSFML.cmake tylko SFMLConfig.cmake i nie jestem w stanie tego zmusić do działania.
Zadanie: podpiąć SFML tak żeby mi działało i na Linuksie, i na Windowsie, bez potrzeby instalowania go (w przypadku Linuksa). Mam pobrane źródła, wrzuciłem je do
2
  • Najlepsze
  • Wszystkie komentarze
L.....x
L.....x
Zna się któryś mirek na programie #cmake? Nie mogę z nim dojść do porozumienia. Podczas kompilacji wywala mi że nie znajduje kilku bibliotek boost, ale co mnie najbardziej niepokoi to to że dostaję komunikat

Please make sure Boost 1.48.0 is installed on your system

Przy czym używam wersji boost 1.66
Z góry dzięki za pomoc
#programowanie
1
  • Najlepsze
  • Wszystkie komentarze
xaoc
xaoc
#cmake #cpp

Mam taki oto scenariusz zależności, chcę zbudować sobie projekt root , który zależy od projektu log

root CMakeLists.txt
- - - - - - - - -- - - - - - - - -- - - - - - - - -- - - - - - - - -- - - - - - - - -- - - - - - - - -
3
  • Najlepsze
  • Wszystkie komentarze
J.....n
J.....n
#cpp #cmake
Standardem teraz jest cmake czy są jakieś nowsze narzędzia do buildowania w cpp? W czym się testuje jednostkowo? Bo w cmake można uruchamiać testy ale są dosyć podstawowe.
3
  • Najlepsze
  • Wszystkie komentarze
u.....E
#cpp #cmake #sfml #programowanie
Mam stary projekt gry w SFMlL i w ramach nauki cmake chciałem go dodać do tego projektu. Drzewo projektu: pastebin
Natomamiast tutaj zawartość mojego CMakeLists.txt.
Jestem na windowsie. Cmake odpalam z cmd w katalogu target poleceniem: cmake -G "MSYS Makefiles" -D SFML_ROOT="C:/SFML-2.3.2" ..
Ktoś wie może co robię źle, że po odpaleniu make dostaje takie błędy jak na picrel (nie
2
  • Najlepsze
  • Wszystkie komentarze
trzeci
4
  • Najlepsze
  • Wszystkie komentarze
WolverinePL
Jako, że #cmake nie przypadł mi do gustu i trafiłem na pewną niedogodność po upgradzie make'a na którym buduję grę postanowiłem trochę poćwiczyć #python i zostawić trochę spuścizny więc zacząłem: https://github.com/podusowski/pake :)

#programowanie #cpp #rusted
2
  • Najlepsze
  • Wszystkie komentarze