Имеется проект с подобной структурой:
include
| foo
| first_foo.h
| second_foo.h
| bar
| first_bar.h
| second_bar.h
src
| foo
| first_foo.cpp
| second_foo.cpp
| bar
| first_bar.cpp
| second_bar.cpp
| main.cpp
СMakeList.txt
Сам CMakeList.txt выглядит следующим образом:
cmake_minimum_required(VERSION 3.0.0)
project(FooBar VERSION 0.1.0)
include_directories("./include")
include_directories("./include/foo")
include_directories("./include/bar")
aux_source_directory("./src/foo" FOO)
aux_source_directory("./src/bar" BAR)
add_executable(${PROJECT_NAME} ${FOO} ${BAR})
main.cpp:
#include "first_foo.h"
#include "second_foo.h"
#include "first_bar.h"
#include "second_bar.h"
using namespace tests;
int main()
{
from_first_foo();
from_second_foo();
from_first_bar();
from_second_bar();
return 0;
}
Проблема в том, что при таких параметрах компилятор выдаёт ошибку:
undefined reference to 'tests::from_first_foo()'
undefined reference to 'tests::from_second_foo()'
undefined reference to 'tests::from_first_bar()'
undefined reference to 'tests::from_second_bar()'
То есть, я так понимаю, что он не может найти файлы реализации. Как сделать так, чтобы он их увидел? Заранее спасибо за ответ.
aux_source_directoryилиfile glob- это будет приводит к проблемам, например в случае переключения между ветками с разным содержимым и т.п. Лучше вручную прописывать source файлы - это самый надежный способ – Andrej Levkovitch Apr 06 '20 at 14:19