use*_*677 5 c++ linker makefile path
假设我正在创建一个使用某个库的项目,并且我必须在链接时提供该库的路径。在命令行或 makefile 中,我可能有:
g++ ... -L/path/to/mylibrary
Run Code Online (Sandbox Code Playgroud)
我也会把这个项目发给其他想要使用它的人。他们系统上的路径可能不一定与我的相同。他们可能一起使用不同的文件路径。
我如何确保库的路径对我的计算机和我的项目的接收者都有效?
这就是构建系统或构建配置工具的作用。周围有很多这样的人。主要的可能是CMake,因为它具有非常广泛的功能集、跨平台且被广泛采用。还有其他一些,例如Boost.Jam、autoconf等等。
使用这些工具的方式是,它们具有自动脚本,用于查看文件系统并查找所需的标头或库,即编译代码所需的依赖项。它们还可以用于执行各种其他奇特的操作,例如检查操作系统支持哪些功能并因此重新配置构建。但关键是,您不需要将任何文件路径硬编码到构建配置中,所有内容要么相对于源文件夹,要么由构建脚本自动找到。
以下是使用 Boost 的项目的示例 CMake 文件:
cmake_minimum_required (VERSION 2.8)
project (ExampleWithBoost)
find_package(Boost 1.46 COMPONENTS thread program_options filesystem REQUIRED)
# Add the boost directory to the include paths:
include_directories(SYSTEM ${Boost_INCLUDE_DIR})
# Add the boost library directory to the link paths:
link_directories(${Boost_LIBRARY_DIRS})
# Add an executable target (for compilation):
add_executable(example_with_boost example_with_boost.cpp)
# Add boost libraries to the linking on the target:
target_link_libraries(example_with_boost ${Boost_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)
cmakefind_package函数只是一个特殊的脚本(专门用于 Boost,并与 CMake 一起安装),用于查找系统上安装的最新版本的 boost(带有一些最小版本),并且它是根据库的文件名模式来执行此操作的。用途。您还可以使用 CMake 提供的用于在文件系统中搜索某些文件名模式(例如正则表达式)的函数来编写您自己的 等价物find_package,甚至您自己的包查找器。
如您所见,上面的构建配置文件仅直接引用您的源文件,例如“example_with_boost.cpp”,并且它仅相对于源文件夹。如果操作正确,配置脚本几乎可以在 CMake 支持的任何系统和操作系统(以及您所依赖的库支持)上运行。这就是大多数主要跨平台项目的工作方式,当您了解如何使用这些系统时,它非常强大且非常易于使用(通常,比按点构建配置更容易使用且无故障) - 然后在 IDE 菜单中单击(就像在 Visual Studio 中一样)。
| 归档时间: |
|
| 查看次数: |
347 次 |
| 最近记录: |