2014-10-16 5 views
2

я прочитал и попробовал примерно каждый учебник/вики/SO пост, страница, фрагмент кода я мог бы найти, чтобы получить этот Cmake работает ....CMake простой подкаталог не включая файлы

У меня есть супер просто структура каталога:

ROOT/ 
|- CMakeLists.txt 
|- main.cpp 
|- sub/ 
    |-CMakeLists.txt 
    |-subx/ 
     |-CMakeLists.txt 
     |-subx.h 
     |-subx.cpp 
    |-suby/ 
     |-CMakeLists.txt 
     |-suby.h 
     |-suby.cpp 

main.cpp супер простая программа каст:

//omitting all unnecessary code 
int main() { 
    subx s; 
    s.defined_method(); 
    s.another_defined_method(1); 
    return 0; 
} 

можно предположить, ради каждого, что определения subx и Suby правильно и работают очень хорошо, потому что оникогда я скомпилирую вручную.

Когда я компилирую с помощью CMake я получаю следующее сообщение об ошибке:

"/path/to/cmake" --build /path/to/Debug --target CS220_Project -- -j 4 
Linking CXX executable simple_project 
Undefined symbols for architecture x86_64: 
    "subx::defined_method()", referenced from: 
     _main in main.cpp.o 
    "subx::another_defined_method(int)", referenced from: 
     _main in main.cpp.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
make[3]: *** [simple_project] Error 1 
make[2]: *** [CMakeFiles/simple_project.dir/all] Error 2 
make[1]: *** [CMakeFiles/simple_project.dir/rule] Error 2 
make: *** [simple_project] Error 2 

Файл корень CMakeLists.txt выглядит:

cmake_minimum_required(VERSION 2.8.4) 
project(simple_project) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

set(SOURCE_FILES main.cpp) 

add_subdirectory(sub) 

add_executable(simple_project ${SOURCE_FILES}) 

Sub CMakeLists.txt файл выглядит:

add_subdirectory(subx) 
add_subdirectory(suby) 

subx & suby Файл CMakeLists.txt выглядит: (они включают их соответствующее различие)

set(SUBX_SOURCES subx.cpp) 

#Add any files in this directory 
add_executable(SUBX ${SUBX_SOURCES}) 

Я пытался что-то вроде add_library, файл (Glob) и т.д. Я не могу, за жизнь мне получить файлы, которые находятся в любом подкаталоге компилировать с программой main.cpp.

ответ

5

Зависит от того, что именно вы хотите, чтобы подпроекты были. Как я понимаю, subx и suby являются библиотеки, которые должны быть связаны с основным исполняемым:

ROOT/CMakeLists.txt

cmake_minimum_required(VERSION 2.8.4) 
project(simple_project) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

set(SOURCE_FILES main.cpp) 

add_subdirectory(sub) 

add_executable(simple_project ${SOURCE_FILES}) 
target_link_libraries(simple_project SUBX SUBY) 

ROOT/subx/CMakeLists.txt

set(SUBX_SOURCES subx.cpp) 

#Add any files in this directory 
add_library(SUBX ${SUBX_SOURCES}) 

(dtto для suby)

+0

Вы, сэр, бог-пошлите. Спасибо. – lilott8

Смежные вопросы