Dołączanie plików *.hpp we wskazanym katalogu

0

Proszę o pomoc bo nie wytrzymam za chwilę, już drugą godzinę kombinuję, problem taki jak w tytule, wstawiam screen z drzewem katalogów:

cmake.PNG

Gdyby ktoś potrzebował kodu cmake:

cmake_minimum_required(VERSION 3.16)

project(concurrency_examples LANGUAGES CXX)

add_subdirectory(apps)

include_directories(include)

Drugi CMakelists:

add_executable(${PROJECT_NAME} main.cpp)

Main świeci się na czerwono, bo nie może znaleźć oczywiście pliku:

#include "test.hpp"

#include <iostream>



int main()
{
    
    std::cout << "Hello" << std::endl;
}
1

np. tak

add_executable(${PROJECT_NAME} main.cpp)

target_include_directories(${PROJECT_NAME} PRIVATE ../include)

ALe to tez nie jest najlepsze rozwiazania
mozna to zrobic lepiej

2

Ja bym użył target_link_libraries do laczenie COS+COS_INNEGO
Ja dopiero od kilku miesiecy w C++ i to też na cześc etatu ;) ale wydaje mi się że globalne ustawiania "include_directories(" nie jest najlepsze
Ja dziele tak:

Jeden CMakeLists.txt aby rządzić wszystkimi

cmake_minimum_required(VERSION 3.0.0)
project(concurrency_examples  VERSION 0.1.0)

add_subdirectory(include)
add_subdirectory(apps)

dodatkowe CMakeLists.txt dla "header only library"

add_library(inc4app INTERFACE)
target_include_directories(inc4app INTERFACE  .)

CMakeLists.txt dla aplikacji

add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} inc4app )
0

Dzięki, ale nadal nie działa, nie wiem czy to nie jest problem z VScode'm, ponieważ kiedy uruchamiam projekt w CLionie wszystko działa :/

1

CMake można debugować, np. możesz sobie zrobić make -n | grep c++

include_directories(foo include)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} foo)

To powinno wygenerować coś w stylu: make -n | grep c++
c++ -I/../include -fPIC -std=gnu++20 -o main.o -c main.cpp

I teraz sobie te headery includujesz

#include <test.hpp>
0

@Eldorad O. używasz "C/C++ Extension Pack" czy z palca cmake ? Wrzuc na githuba jakis przyklad

@Wypierdzistyy można też włączyć

set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "ON" FORCE)

jak projekt budowany ninja to też wyświetla

0

@Adamek Adam: Posiadam obydwa rozszerzenia, w sensie jaki przykład?
Cały kod wrzuciłem tutaj oprócz kodu z plik test, znajduje się w nim jedna funkcja:

float add(float a, float b)
{
  return a + b;
}

I to tyle ;d

2

mam mało czasu to rzuciłem tylko okiem.
zwróciłbym uwagę na to że najpierw dajesz add_subdirectory a później include
a co mamy napisane w dokumentacji?

The include directories are added to the directory property INCLUDE_DIRECTORIES for the current CMakeLists file. They are also added to the target property INCLUDE_DIRECTORIES for each target in the current CMakeLists file. The target property values are the ones used by the generators.

ale moim zdaniem ta cała struktura jest bez sensu.

  1. Nazwa test sugeruje że to testy ale wrzucasz to jako jednak po prostu includ do main

ja bym to inaczej zorganizował katalog src a tam pod foldery, podziel to na pod libki i linkuj sobie. Przykład jak to robić(nawet jeden cmake ma same .h jak chesz)

kiedyś wrzucałem
repo
https://github.com/Quick-Turn-Studio/WroCppEffectiveModernCMakeProject
yt:

1

@Eldorad O.: Przez przykład rozumiem kompletny kawałek kodu np. https://github.com/mariuszmaximus/4p_365268
Zapchałem Ci kompletny projekt
Foldery:
apps = aplikacja
libki = biblioteka z funkcją add nazwa zgodnie z sugestią @revcorey :D

Przykład o CMAKE który podał @revcorey bardzo dobry na początek też polecam

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