我正在尝试使用以下CMakeLists.txt
:
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.c
我main
无效。现在,像这样的标准命令行编译
gcc -o bar bar.c bar.h foo.h foo.c -lm
工作正常,但构建项目会产生对pow
的未定义引用。正如我可以看到我在-lm
文件中包含CmakeLists.txt
标志,所以我不明白为什么这个链接部分在这里不起作用
答案 0 :(得分:3)
CMAKE_CXX_FLAGS
是C ++编译器的标志。 -l
是链接器标志。要链接到库,请使用:
target_link_libraries(alfa_1 m)
您可能还希望使用CMAKE_C_STANDARD
和相关变量(-std=c11
,CMAKE_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(...)
声明之后进行。