C Cmake设置 - 对pow()的未定义引用(尽管-lm)

时间:2017-05-19 14:51:29

标签: cmake

我正在尝试使用以下CMakeLists.txt

构建一个项目(使用CLion)
cmake_minimum_required(VERSION 3.6)
project(alfa_1)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c11 -Wall -Wextra -lm")

set(SOURCE_FILES
        src/foo.h
        src/foo.c
        src/bar.h
        src/bar.c
        src/parser.h
        src/parser.c)

add_executable(alfa_1 ${SOURCE_FILES})

foo.c我使用pow()中的math.h函数,我将其包含在foo.h中。显然foo.h中包含foo.c。在bar.cmain无效。现在,像这样的标准命令行编译

gcc -o bar bar.c bar.h foo.h foo.c -lm

工作正常,但构建项目会产生对pow的未定义引用。正如我可以看到我在-lm文件中包含CmakeLists.txt标志,所以我不明白为什么这个链接部分在这里不起作用

3 个答案:

答案 0 :(得分:3)

CMAKE_CXX_FLAGS是C ++编译器的标志。 -l是链接器标志。要链接到库,请使用:

target_link_libraries(alfa_1 m)

您可能还希望使用CMAKE_C_STANDARD和相关变量(-std=c11CMAKE_C_STANDARD_REQUIRED)替换CMAKE_C_EXTENSIONS,并可能将CMAKE_CXX_FLAGS替换为 let someString = json["name"].string let someArray = json["products"].arrayObject 致电target_compile_options()

答案 1 :(得分:0)

在cmakeList中添加库的链接

add_library(math STATIC path/to/file.cpp)

add_executable(cmake_hello main.cpp)
target_link_libraries(cmake_hello math)

在cpp类中

#include "path/to/file.hpp"

有关模式详细信息,请参见此link

答案 2 :(得分:0)

在Clion中,这种配置解决了我的问题:

cmake_minimum_required(VERSION 3.13)
project(K_Nearest C)

set(CMAKE_C_STANDARD 99)

add_executable(K_Nearest main.c point.h point.c group.c group.h)
target_link_libraries(K_Nearest m)

重要的一步是:target_link_libraries(K_Nearest m),应该在add_executable(...)声明之后进行。