【问题标题】:Convert makefile to cmakelist将makefile转换为cmakelist
【发布时间】:2018-03-21 00:43:58
【问题描述】:

我有一个如下所示的生成文件:

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 有什么问题?

【问题讨论】:

标签: c gcc makefile cmake


【解决方案1】:

你必须像这样使用target_link_libraries

target_link_libraries(project1 m)

并将其放在add_executable 调用之后,因为target_link_libraries 的第一个参数是已知目标,在您的情况下为project1

this

还要注意CMAKE_CXX_FLAGS是编译器标志的变量,-lm是链接器标志,所以在编译过程中-lm是没用的。

【讨论】:

    猜你喜欢
    • 2015-08-19
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多