我想用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
。這會在目錄/Maths/build
中創建庫文件libmaths.a
。
然後,我進入目錄/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的。我對C++編程實踐一無所知,剛開始。你能解釋你的第一個推薦嗎?因爲我無法理解提供的鏈接中的一件事。如果你能舉一個例子,我會非常感激。 – Bora 2017-03-09 19:34:32
@Bora find_library命令只是在磁盤上查找庫文件。由於CMake知道不同編譯器的命名約定,因此只需提供原始名稱(示例中爲'maths'),而不用任何文件擴展名,CMake就會自動搜索正確的文件。根據您的系統和文件的位置,您可能還需要提供文件所在位置的其他提示。查看鏈接的聯機幫助頁以查看查找規則的完整說明。但最終它只不過是在磁盤上搜索具有匹配名稱的文件而已。 – ComicSansMS 2017-03-09 20:18:15