【发布时间】:2016-02-16 14:19:29
【问题描述】:
我正在学习 CMake,但我很难理解如何将二进制文件链接到共享库,然后将这些文件安装到发布文件夹中。
这是我的项目的结构:
├── CMakeLists.txt
├── build
├── main
│ ├── CMakeLists.txt
│ └── main.cpp
├── release
|_______bin
│ ├── include
│ │ └── math.h
│ └── lib
│ └── libmathLib.dylib
└── shared_lib
├── CMakeLists.txt
├── include
│ └── math.h
└── src
└── math.cpp
在根 CMakeLists.txt 中,我定义了项目设置和子目录。
根 CMakeLists.txt:
cmake_minimum_required(VERSION 3.1)
project (Math)
set(CMAKE_BUILD_TYPE Release)
set(MAKE_INCLUDE_CURRENT_DIR ON)
ADD_SUBDIRECTORY(shared_lib)
ADD_SUBDIRECTORY(main)
主 CMakeLists.txt:
add_executable(main main.cpp)
TARGET_LINK_LIBRARIES(main LINK_PUBLIC mathLib)
数学库(共享库)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
add_library(mathLib SHARED src/math.cpp)
install(TARGETS mathLib DESTINATION /Users/giuseppe/development/cmake/release/lib LIBRARY NAMELINK_ONLY)
install(FILES include/math.h DESTINATION /Users/giuseppe/development/cmake/release/include)
当我使用 Make 构建项目时,它不会将 main.o 链接到共享库。错误:
Scanning dependencies of target mathLib
[ 50%] Building CXX object shared_lib/CMakeFiles/mathLib.dir/src/math.cpp.o
Linking CXX shared library libmathLib.dylib
[ 50%] Built target mathLib
Scanning dependencies of target main
[100%] Building CXX object main/CMakeFiles/main.dir/main.cpp.o
/Users/giuseppe/development/cmake/main/main.cpp:8:12: error: use of undeclared identifier 'sum'
count << sum(5,6) << endl;
^
1 error generated.
make[2]: *** [main/CMakeFiles/main.dir/main.cpp.o] Error 1
make[1]: *** [main/CMakeFiles/main.dir/all] Error 2
make: *** [all] Error 2
发布阶段:
如何确保发布文件夹中 bin 文件夹中的构建使用“路径/发布/库”中的共享库?可能使用相对路径,例如 '../lib/' ?
【问题讨论】:
-
您的可执行文件的名称是
math,并且您正在尝试链接到一个名为main的目标。这是笔误吗? -
@HeyYO 谢谢,是的,这是一个错字。
-
use of undeclared identifier是编译器错误,而不是链接器。您的包含有问题。您确定math.h在您的包含路径中吗?我假设这是声明sum()的文件。 -
对了,
math.h是 C 标准数学库的名称。不要将此名称用于您自己的文件! -
它包括标准数学库。现在我把名字改成了my_math.h,找不到头文件