LINUX.ORG.RU

CMake


0

1

знакомлюсь с CMake, сразу возникли вопросы.

Проблема в том что не знаю разницы между .o и .a (и библиотеками). Раньше всегда собирал программы так: делаем .o файлы для каждого .c потом все это линкуем в общую программу.

А в CMake вместо объектных файлов используются только библиотеки как я понял. Например add_library делает сборку библиотеки из указанных хедерных и сурсных файлов.

В чем собсно разница между просто объектным файлом .о и библиотечным файлов .a (разнице между статической линковкой и динамической я вроде понял)

Например если я имею два .c файла, то раньше я собирал это в два .o потом линковал. Щас мне нужно написать add_library(... header source) таким образом подразумевается что ны выходе будет один библиотечный файл. А потом а гдето выше по иерархии add_executable. Разницу между двумя .o и одним .a есть вообще принципиальная?


Ответ на: комментарий от Cupper

новая проблема имею следующее дерево каталогов

./bussines_object
./bussines_object/build
./bussines_object/include
./bussines_object/src
./server
./server/build
./server/include
./server/src
./bussines_object/build находиться cmake файл следующего содержимого
cmake_minimum_required (VERSION 2.6)

add_definitions (
	-std=c++0x
	-I../include)
set (PROJECT bussines_object)

project (${PROJECT})

set (HEADER_PATH ../include)
set (SRC_PATH ../src)

set (HEADERS 
	${HEADER_PATH}/persone.hpp
	${HEADER_PATH}/address.hpp)
set (SOURCES 
	${SRC_PATH}/persone.cpp
	${SRC_PATH}/address.cpp)

source_group ("Header Files" FILES ${HEADERS})
source_group ("Source Files" FILES ${SOURCES})

add_library (${PROJECT} ${HEADERS} ${SOURCES})
в ./server/build главнй файл для сборки, подключающий этот. Генерация makefile проходит успешно. Но при запуске make получаю ошибку
bussines_object/src/persone.cpp:2:23: fatal error: persone.hpp: Нет такого файла или каталога
compilation terminated.
make[2]: *** [bin/bussines_object/CMakeFiles/bussines_object.dir/.../bussines_object/src/persone.cpp.o] Ошибка 1
make[1]: *** [bin/bussines_object/CMakeFiles/bussines_object.dir/all] Ошибка 2
make: *** [all] Ошибка 2
файл persone.c начинается с подключения хедера
#include<ostream>
#include <persone.hpp>
...
и специально не хочу жестко указывать путь подключаемого хедера, а чтобы он его искал в нужном месте дабавляю параметры для компилятора в cmake файле (приведенном выше)
add_definitions (
	-std=c++0x
	-I../include)
но почемуто это не срабатывает. Помогите найти ошибку.

Cupper
() автор топика
Ответ на: комментарий от Cupper

хороший сон решил эту проблему :) include_directories(../include).

Cupper
() автор топика
Ответ на: комментарий от Cupper

но почемуто это не срабатывает. Помогите найти ошибку.

очевидно, что это не definitions

Reset ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.