我使用下面这行代码来编译一个简单的程序:
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)也不能工作(但我认为这在总体上是错误的)。
谢谢!
发布于 2012-05-08 08:52:32
如果ntl、m和gmp库通常安装在默认路径中的某个位置(例如/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命令(对于g++,转换为-I )找到要添加的适当路径。
注意,用引号将额外的CXX_FLAGS参数括起来很重要,否则CMake会将它们视为列表中的单独值,并在标志之间插入分号。
有关find_library、find_file等的更多信息,请运行:
cmake --help-command find_library
cmake --help-command find_file发布于 2012-05-08 07:56:01
关于你的错误:
看起来CMake中并没有包含FindNTL.cmake模块。这意味着你必须选择:
FindNTL.cmake,
从(相当快速的)谷歌搜索中,似乎有人拥有an NTL module for CMake。因为NTL使用GMP,所以你可能需要the associated GMP module for CMake。它看起来不像一个功能齐全的CMake模块,但它似乎也是最好的(同样,它是一个快速的谷歌搜索,我不使用NTL)。
要使用它,您需要在CMakeLists.txt中添加一些内容
# Let CMake know where you've put the FindNTL.cmake module.
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/build/CMake/Modules")
# Call the FindNTL module:
find_package(NTL REQUIRED)集合(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -std=c++0x -lntl -lm -lgmp)
是的,这是错误的。你不想用链接指令来设置你的CXX_FLAGS。我将使用:
SET ( CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -std=cxx0x )要设置要使用的Cxx标准,请执行以下操作。要实际链接到库,您需要执行以下操作:
find_package ( FOO )行)${bar_LIBRARIES}和${baz_LIBRARY}不是一个拼写错误;在FindFOO.cmake模块中没有设置相关库的标准方法,在我看来,这很烦人。如果其中一个不起作用,请尝试另一个,或者,在最坏的情况下,查看相关的FindFOO.cmake文件(默认情况下随CMake一起安装了一大堆),看看每个文件使用的是什么。通过我提供的链接,您可以使用${NTL_LIB}和${GMP_LIB}。https://stackoverflow.com/questions/10490474
复制相似问题