cmake - добавление субмодуля - PullRequest
       2

cmake - добавление субмодуля

0 голосов
/ 07 сентября 2018

Я пытаюсь создать тестовый проект с «подмодулем / подпроектом».

Сбой компиляции с:

example_01/src/main.cpp:2:10: fatal error: inc/foo2.hpp: No such file or directory
#include "inc/foo2.hpp" // #include "submodule/inc/foo2.hpp"
          ^~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/hello_world.dir/build.make:63: CMakeFiles/hello_world.dir/src/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:73: CMakeFiles/hello_world.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

Мои файлы:

main CMakeLists.txt

cmake_minimum_required(VERSION 3.12)
project(hello_world)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

include_directories(${PROJECT_SOURCE_DIR})
add_subdirectory("submodule")
add_executable(${PROJECT_NAME} 
src/main.cpp 
src/foo.cpp)

main.cpp

#include "inc/foo.hpp"
#include "inc/foo2.hpp" // #include "submodule/inc/foo2.hpp"

int main()
{
    foo();
    foo2();

    return 0;
}

foo.cpp

#include <iostream>
#include "inc/foo.hpp"

void foo()
{
    std::cout << "Hello World!\n";
}

foo.hpp

void foo();

субмодуль cmakelist

project(submodule_dummy1)
add_executable(${PROJECT_NAME} src/foo2.cpp)

foo2.cpp

#include <iostream>
#include "inc/foo2.hpp"

void foo2()
{
    std::cout << "FuuTwo\n";
}

foo2.hpp

void foo2();

Есть ли еще что-то, что мне нужно объявить, чтобы он мог "видеть" заголовок подмодуля?

ОБНОВЛЕНИЕ

Дерево

.
├── build
├── CMakeLists.txt
├── inc
│   └── foo.hpp
├── readme.md
├── src
│   ├── foo.cpp
│   └── main.cpp
└── submodule
    ├── CMakeLists.txt
    ├── inc
    │   └── foo2.hpp
    └── src
        └── foo2.cpp

Новый главный cmakelist

cmake_minimum_required(VERSION 3.12)
project(hello_world)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

include_directories(${PROJECT_SOURCE_DIR})
include_directories(${PROJECT_SOURCE_DIR}/submodule)

add_subdirectory("submodule")
add_executable(${PROJECT_NAME} 
    src/main.cpp 
    src/foo.cpp)

новое сообщение об ошибке

Scanning dependencies of target hello_world
[ 20%] Building CXX object CMakeFiles/hello_world.dir/src/main.cpp.o
[ 40%] Linking CXX executable hello_world
/usr/bin/ld: CMakeFiles/hello_world.dir/src/main.cpp.o: in function `main':
main.cpp:(.text+0xa): undefined reference to `foo2()'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/hello_world.dir/build.make:99: hello_world] Error 1
make[1]: *** [CMakeFiles/Makefile2:73: CMakeFiles/hello_world.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

1 Ответ

0 голосов
/ 07 сентября 2018

Вам не хватает

include_directories(${PROJECT_SOURCE_DIR}/submodule)

в основном CMakeLists.txt.

Также вам нужно скомпилировать и связать submodule/src/foo2.cpp (добавив его в качестве аргумента в команду add_executable в вашем основном CMakeLists.txt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...