Я хочу использовать CMake для создания простой статической библиотеки Maths
, а затем ссылку на эту библиотеку для создания простого исполняемого файла Alpha
.CMake не может найти файл моей библиотеки
Вот моя структура каталогов:
/Maths
/build
/
/CMakeLists.txt
/maths.cpp
/maths.h
/Alpha
/build
/
/CMakeLists.txt
/main.cpp
А вот содержимое этих файлов:
* CMakeLists.txt (для Математики) *
cmake_minimum_required(VERSION 2.6)
project(Maths)
add_library(maths STATIC maths.cpp)
* математика .cpp *
int Double(int x)
{
int y = x * 2;
return y;
}
* * maths.h
int Double(int x);
* CMakeLists.txt (для альфа) *
cmake_minimum_required(VERSION 2.8)
project(Alpha)
add_executable(alpha main.cpp ../Maths/maths.h)
target_link_libraries(maths ../Maths/build/libmaths.a)
* main.cpp *
#include <iostream>
#include "maths.h"
using namespace std;
int main()
{
int x = 5;
int y = Triple(x);
cout << "The answer = " << y << endl;
return 0;
}
Итак, я вхожу в каталог /Maths/build
и запускаю cmake ..
. Затем я запускаю make
. Это создает файл библиотеки libmaths.a
в каталоге /Maths/build
.
Затем я вхожу в каталог /Alpha/build
и запускаю cmake ..
. Затем я запускаю make
. Однако это дает мне сообщение об ошибке:
/usr/bin/ld: cannot find -lmaths
Почему не удается найти файл библиотеки, который я только что создал?
Я также попытался copyiing libmaths.a
и maths.h
в каталог /Alpha
и изменение CMakeLists.txt Альфы к:
cmake_minimum_required(VERSION 2.8)
project(Alpha)
add_executable(alpha main.cpp maths.h)
target_link_libraries(maths libmaths.a)
Но это дало ту же ошибку.
Я также с той же проблемой здесь, а также просто начать работу с CMake. Я ничего не знаю о методах программирования на С ++, просто приступая к работе. Не могли бы вы объяснить свою первую рекомендацию? Потому что я не мог понять вещь в предоставленной ссылке. Если вы можете привести пример, я буду очень благодарен. – Bora
@Bora Команда 'find_library' просто ищет файл библиотеки на диске. Поскольку CMake знает соглашение об именах разных компиляторов, вы просто указываете необработанное имя ('maths' в примере) без каких-либо расширений файлов, и CMake автоматически ищет правильный файл. В зависимости от вашей системы и местоположения файла вам может потребоваться дополнительные подсказки, где находится файл. Взгляните на связанную справочную страницу, чтобы получить полное объяснение правил поиска. Но, в конце концов, это действительно не что иное, как поиск файла с совпадающим именем на диске. – ComicSansMS