未定義參考我有folllowing目錄結構:與使用cmake自己的庫
-project
-helper
-build
-include
-h_a.h
-h_b.h
-src
-h_a
-h_a.cpp
-CMakeLists.txt
-h_b
-h_b.cpp
-CMakeLists.txt
-CMakeLists.txt
-proj_c
-build
-src
-main.cpp
-CMakeLists.txt
在helper
項目生成兩個庫:libh_a.a
和libh_b.a
。 libh_a.a
用於構建libh_b.a
。這些文件如下:
helper/src/CMakeLists.txt:
cmake_minimum_required(VERSION 2.6)
project(helper)
set(CMAKE_CXX_FLAGS "-Wall -g -std=c++11")
add_subdirectory(h_a)
add_subdirectory(h_b)
helper/src/h_a/CMakeLists.txt:
project(h_a)
add_library(h_a h_a.cpp)
helper/src/h_a/h_a.cpp
void func_a(){}
helper/src/h_b/CMakeLists.txt:
project(h_b)
add_library(h_b h_b.cpp)
target_link_libraries(
h_b STATIC
h_a
)
helper/src/h_b/h_b.cpp:
#include "../../include/h_a.h"
void func_b(){
func_a();
}
proj_c/src/CMakeLists.txt:
cmake_minimum_required(VERSION 3.2)
project(proj_c)
find_library(h_a PATHS ../../helper/build/h_a)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../helper/build/h_a)
find_library(h_b PATHS ../../helper/build/h_b)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../helper/build/h_b)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "../bin/")
add_executable(proj_c main.cpp)
target_link_libraries(
proj_c
h_a
h_b
)
proj_c/src/main.cpp:
#include "../../helper/include/h_b.h"
int main(){
func_b();
}
首先,我跑cmake ../src
從helper/build
(無誤差形式交往),比cmake ../src
從proj_c/build
和我
proj_c/src/../../helper/build/h_b/libh_b.a(h_b.cpp.o): In function `func_b()':
helper/src/h_b/h_b.cpp:4: undefined reference to `func_a()'
看來這個問題是h_b.cpp
,但libh_b.a
已沒有錯誤之前建成。
相依通用CMake的建議:'設置(CMAKE_CXX_STANDARD 11)'設置C++ 11平臺獨立。將'CMAKE_BUILD_TYPE'設置爲'Debug'(而不是將'-g'添加到'CMAKE_CXX_FLAGS')來獲取平臺獨立編譯的調試信息。設置'-Wall'之前檢查'CMAKE_COMPILER_IS_GNUCC'。 – DevSolar