【问题标题】:Custom Directory for CMake Library OutputCMake 库输出的自定义目录
【发布时间】:2025-12-16 14:25:06
【问题描述】:

在 CMake 中,我似乎无法在 ../out/library 中输出我的库,只有库。当我执行 ../out/library 路径时,它告诉我它找不到库,就好像它想链接到它一样。

add_library(../out/JE3D ../source/CDeviceLayerSDL.cpp)

还有更多文件,我只是在节省空间。当我这样做时,我会收到此错误。

链接 CXX 静态库 lib../out/JE3D.a /usr/bin/ar: lib../out/JE3D.a: 没有这样的文件或目录 make[2]: * [lib../out/JE3D.a] 错误 1 make[1]: * [CMakeFiles/../out/JE3D.dir/all] 错误 2 make: *** [all] 错误 2

【问题讨论】:

  • 需要更多信息。 CMakeLists.txt 中的片段和错误消息中的剪切和过去会有所帮助。
  • 好的,我添加了更多信息。

标签: cmake


【解决方案1】:

LIBRARY_OUTPUT_DIRECTORY 目标属性指定构建库目标文件的目录。

set_target_properties(JE3D PROPERTIES
         LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/out/library)

如果所有的库都在一个目录下,我觉得设置CMAKE_LIBRARY_OUTPUT_DIRECTORY变量比较方便,这个变量用来在创建目标时初始化LIBRARY_OUTPUT_DIRECTORY属性。

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/out/library)

编辑:如果您的目标是静态库,请检查 cmets

【讨论】:

  • 您不能只在库名称中使用路径组件的原因是因为 CMake 简单地修改了该名称以获取库名称。在您的主机上,它使用lib${FILE}.a 模式,当您尝试使用路径时它不起作用。
  • LIBRARY_OUTPUT_DIRECTORY 对我不起作用。根据文档,此属性控制共享库的输出目录。静态库由 ARCHIVE_OUTPUT_DIRECTORY 属性控制。
  • 即使 ARCHIVE_OUTPUT_DIRECTORY 对我也不起作用,无论我把什么作为最后一个参数,无论我指定什么,lib 总是放在 /lib 中! set_target_properties(libdocopt PROPERTIES IMPORTED_LOCATION ${PROJECT_BINARY_DIR}/out/library}} 更糟糕的是,在 MacOS 上,如果我指定 /lib/libdocopt.a 它可以工作。在 Linux 上,它位于 /lib64/libdocopt .a :-O 是的,我确实包含(GNUInstallDirs)。有人知道吗?
  • 它不适用于对象库