gpt4 book ai didi

c++ - 如何使用 CMake 包含 NTL

转载 作者:行者123 更新时间:2023-11-30 00:38:32 25 4
gpt4 key购买 nike

我用这一行来编译一个简单的程序:

g++ main.cc -lntl -lm -lgmp 

如何将其包含到 CMake 中?

find_package(NTL REQUIRED)
find_package(GMP REQUIRED)

不起作用。并给出以下错误:

CMake Error at CMakeLists.txt:30 (find_package):
Could not find module FindNTL.cmake or a configuration file for package
NTL.
...
.

SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -std=c++0x -lntl -lm -lgmp)

也不起作用(但我认为它通常是错误的)。

谢谢!

最佳答案

如果 ntlmgmp 库通常安装到默认路径中的某处(例如 /usr//usr/local/),您可以简单地执行以下操作:

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project(Test)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
add_executable(test main.cc)
target_link_libraries(test ntl m gmp)


这可能最接近您原来的 g++ 命令,但它不是很健壮;如果未找到任何库,则在尝试链接之前您不会知道它。如果您想在配置时失败(即在运行 CMake 时),您可以为每个所需的库添加 find_library 调用,例如

find_library(NTL_LIB ntl)
if(NOT NTL_LIB)
message(FATAL_ERROR "ntl library not found. Rerun cmake with -DCMAKE_PREFIX_PATH=\"<path to lib1>;<path to lib2>\"")
endif()

然后您必须将 target_link_libraries 命令更改为

target_link_libraries(test ${NTL_LIB} ${M_LIB} ${GMP_LIB})

然后您可能还必须为每个库的头文件之一执行 find_file,以通过 include_directories 命令(翻译到 -I 用于 g++)。


请注意,在额外的 CXX_FLAGS 参数周围加上引号很重要,否则 CMake 将它们视为列表中的单独值并在标志之间插入分号。


有关 find_libraryfind_file 等的更多信息,请运行:

cmake --help-command find_library
cmake --help-command find_file

关于c++ - 如何使用 CMake 包含 NTL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10490474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com