我有一个看起来像这样的makefile:
CC = gcc
OPTFLAGS = -O3 -fno-strict-aliasing -D_GNU_SOURCE
COPTIONS = -DLINUX -D_FILE_OFFSET_BITS=64 -std=c99 -Wall\
-Wno-unused-function -Wno-unused-label -Wno-unused-variable\
-Wno-parentheses -Wsequence-point
#Standard Libraries
STDLIBS = -lm
CFLAGS = $(COPTIONS) $(OPTFLAGS)
LIBS = $(STDLIBS)
SOURCE = sd.c getopt.c cmdline.c util.c
EXE = sd
default:
$(CC) $(CFLAGS) $(SOURCE) $(LIBS) -o $(EXE)
我想为上面的makefile编写Cmakelist.txt。我试过以下:
cmake_minimum_required(VERSION 3.9)
project(project1)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_FLAGS "-O3 -fno-strict-aliasing -D_GNU_SOURCE DLINUX -D_FILE_OFFSET_BITS=64 -std=c99 -Wall -Wno-unused-function -Wno-unused-label -Wno-unused-variable -Wno-parentheses -Wsequence-point -lm" )
add_executable(project1
cmdline.c
getopt.c
sd.c
util.c)
在此之后,我收到了错误
undefined reference to `sqrt'
因为我的cmakefile无法加载标准库(-lm)。有人可以用cmakelist帮我。我的cmakelist有什么问题?
答案 0 :(得分:3)
你必须像这样使用Github:
target_link_libraries(project1 m)
并在add_executable
调用之后将其放置,因为target_link_libraries
的第一个参数是已知目标project1
。
另请注意,CMAKE_CXX_FLAGS
是编译器标志的变量,-lm
是链接器标志,因此在编译期间执行-lm
是没用的。