gpt4 book ai didi

c++ - 从 Makefile 到 Cmake

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:21:22 25 4
gpt4 key购买 nike

因为 CLion 的发布,我想从 make 转移到 CMake。所以我有一堆 .cpp.hpp 文件和一个 main.cpp 使用上面源代码的类的源文件夹 - 到目前为止我有简单的 Makefile 可以从 main.cpp 中编译、链接和执行:

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 )

但我在链接时不断收到对我所有类的“ undefined reference ”,并且根据编译时间判断,感觉并不是所有内容都已编译。你能帮忙吗? :)

最佳答案

尝试将库设为静态而不是共享。

add_library( myLib STATIC ${SRC} )

否则默认情况下您将获得一个共享库,这需要适当的导出宏。

如果没有导出宏,库中的符号(例如方法)不会被导出,因此在链接时不可用。 Windows 上的共享库始终需要正确的导出宏,并且在设置 -fvisibility=hidden 时对于 Unix 上的共享库也是必需的,这通常是这种情况。

此外,正如其他人所说,不要使用 GLOB,而是根据 http://www.cmake.org/cmake/help/v3.0/command/file.html 明确列出您的文件.但这是一个很好的做法,与您的实际链接错误无关。

关于c++ - 从 Makefile 到 Cmake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25769368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com