无论如何,是否只是为编译器和链接器添加搜索目录并添加类似于您对code :: blocks所做的链接器设置?
code::blocks compiler search directory example
code::blocks linker search directory example
code::blocks linker settings example
如果code :: blocks没有过时并且缺少像样的代码完成和掉毛之类的东西,我什至不使用cmake。但这显然是最好的选择,如果我想使用Visual Studio代码或Sublime Text 3之类的编辑器。
我只是不知道如何简单地做include_directories和link_libraries而不会大惊小怪。
编辑:这是我最近的尝试,并且我已经关闭了它才能正常工作。
cmake_minimum_required(VERSION 3.0)
project(Platformer)
include_directories(
libraries/raylib/include
)
set(
RAYLIB
${PROJECT_SOURCE_DIR}/libraries/raylib/lib/libraylib.dll.a
)
set(SOURCES
main.cpp
)
add_executable(Platformer ${SOURCES})
link_libraries(${RAYLIB})
这给了我很多未定义的引用
答案 0 :(得分:3)
命令link_libraries
仅影响在命令调用后创建的可执行文件/库。 documentation中明确指出:
指定在链接由当前目录(<{>} )创建的目标时使用的库或标志,这些目标在当前目录或以下目录中由以下内容创建:<{1}}或
add_executable()
您的可执行文件add_library()
是在调用Platformer
之前 创建的,因此它实际上并未链接。
您需要将呼叫交换到link_libraries
和add_executable
:
link_libraries
或使用link_libraries(${RAYLIB})
add_executable(Platformer ${SOURCES})
代替target_link_libraries
link_libraries
(在后一种情况下,顺序不会颠倒:add_executable(Platformer ${SOURCES})
target_link_libraries(Platformer ${RAYLIB})
要求已创建的目标作为第一个参数)。
请注意,target_link_libraries
优于target_link_libraries
调用,因为它以更结构化的方式生成项目。
答案 1 :(得分:0)
如果您计划有多个全部使用RAYLIB的可执行文件,则将link_libraries排列在SOURCES之前,即在RAYLIB定义之后,因为它的作用是之后定义的任何可执行文件。否则,为每个需要它的目标使用target_link_libraries。
我真的只是用不同的词来回声@Tsyvarev,但我想不出一种方法来表达自己的想法。