将makefile转换为cmake
Transforming makefile to cmake
我正在使用makefile运行一个程序,它看起来像这样:
CXX = g++
CXXFLAGS = -c -Wall -g -std=c++11 -I/usr/local/include
OBJS = main.o Integr.o Data.o Interpolate.o
all: main
main: $(OBJS)
$(CXX) $(OBJS) -lgsl -lgslcblas -lm -o main
main.o: main.cpp
$(CXX) $(CXXFLAGS) main.cpp
Integr.o: Integr.cpp
$(CXX) $(CXXFLAGS) Integr.cpp
Data.o: Data.cpp
$(CXX) $(CXXFLAGS) Data.cpp
Interpolate.o: Interpolate.cpp
$(CXX) $(CXXFLAGS) Interpolate.cpp
clean:
rm -f *.o
,然后我想用Clion调试我的代码,但是我在构建它时遇到了问题。CMakeList看起来像这样:
cmake_minimum_required(VERSION 3.3)
project(Desktop)
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_FLAGS "-o -g -std=c++11 -lgsl -lgslcblas -lm")
add_definitions(${CMAKE_CXX_FLAGS})
include_directories(-I/usr/local/include)
set(SOURCE_FILES
Data.cpp
Data.h
Integr.cpp
Integr.h
Interpolate.cpp Interpolate.h main.cpp)
add_executable(Desktop ${SOURCE_FILES})
有一些错误,关于gsl,他们看起来像这样:
undefined reference to `gsl_rng_env_setup'
"未定义的引用"是一个链接错误。您忘记链接您在Makefile中使用的库了。
使用CMake,你需要在add_executable后面添加这一行:
target_link_libraries(Desktop gsl gslcblas m)
请注意,在CMake中列出库时不要使用"-l"。
删除编辑CXX_FLAGS的行
CMAKE_CXX_FLAGS只传递给从.cpp编译。o,但是您想要链接的库应该传递给链接阶段(从。o编译可执行文件/lib)。使用target_link_libraries()函数来完成此操作。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 防止主数据类型C++的隐式转换
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- 将 cmake 代码段转换为函数 - 不起作用
- C++:禁用 CMake 中的旧样式转换警告
- 将QMAKE项目转换为CMAKE
- 将 qmake 转换为 cmake 时出现链接错误
- 将GCC命令转换为Android NDK的CMAKE
- 如何使用Cmake为SimuroSot模拟器构建(从DevCpp转换)Win32 DLL
- qmake 到 cmake 转换和链接错误
- 我需要帮助将 vcxproj 转换为 cmake
- 如何将.ino Arduino项目转换为CMake
- 将项目转换为 qt5 并将未定义的引用转换为 'vtable for qt5 和 cmake
- 如何将cmake项目转换为Visual Studio等效项
- 将 Makefile 项目转换为 Cmake
- 将makefile转换为cmake
- 静态库-如何导入'.在c++中把一个'文件转换成CMake