From Makefile to Cmake
From Makefile to Cmake
由于CLion的发布,我想从make转到CMake。因此,我有一个源文件夹,里面有一堆.cpp
和.hpp
文件,还有一个main.cpp
,里面有来自上面源代码的use类——到目前为止,我已经有了一个简单的Makefile来编译、链接和制作来自main.cpp
:的exec
C_OBJS := $(shell find source/*/ -name '*.cpp')
SOURCES=source/main.cpp $(C_OBJS)
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=bin/main
$(EXECUTABLE_T): $(OBJECTS_T)
$(CC) $(LDFLAGS) $(OBJECTS_T) -o $@
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
%.o: %.cpp
$(CC) $(CFLAGS) $< -c -o $@
all: $(EXECUTABLE)
在Cmake中,我发现了类似的东西:
cmake_minimum_required(VERSION 2.8.4)
project(Main)
#grab all file we need to compile
file(GLOB SRC
"source/*.h"
"source/*.hpp"
"source/*.cpp"
)
#compile to .o files all we need
add_library( myLib ${SRC} )
set(SOURCE_FILES source/main.cpp)
#compile to .o main.cpp
add_executable( Main ${SOURCE_FILES} )
#link them all
target_link_libraries( Main myLib )
但我在链接时不断得到对所有类的"未定义引用",根据编译时间判断,感觉并不是所有的东西都编译好了。你能帮忙吗?:)
尝试将库设置为静态库,而不是共享库。
add_library( myLib STATIC ${SRC} )
否则,默认情况下会得到一个共享库,这需要正确的导出宏。
如果没有导出宏,库中的符号(例如方法)将不会导出,因此在链接时不可用。正确的导出宏对于Windows上的共享库总是必要的,并且对于Unix上的共享库当设置了-fvisibility=hidden
时也是必要的,通常情况就是这样。
此外,正如其他人所说,不要使用GLOB,而是根据http://www.cmake.org/cmake/help/v3.0/command/file.html.但这是一个很好的做法,与实际的链接错误无关。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- "error: no matching function for call to"构造函数错误
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用CMake创建QML插件
- cmake如何在fedora工作站中找到boost静态库包
- 使用CMake检测支持的C++标准
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- C++ : "undefined reference to"可能是因为CMake文件
- 你如何修复'cmake ..&&&使安装' "No rule to make target install" ?
- 如何处理"Cmake Error: Unable to find the requested Boost libraries"?
- CMAKE CMAKE_C_COMPILER "is not a full path to an existing compiler tool"
- MinGW/CMake Undefined Reference to ZLib
- CMake is unable to find boost_asio
- CMake install to /bin
- 链接到共享库时 cmake 中"No rule to make target"错误
- From Makefile to Cmake
- CMake Copy File to Current Working Directory Linux
- CMake with cygwin " make[2]: *** No rule to make target 'cygwin' "