CMake库输出的自定义目录

Joo*_*kia 20 cmake

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

add_library(../out/JE3D ../source/CDeviceLayerSDL.cpp)
Run Code Online (Sandbox Code Playgroud)

有更多的文件,我只是在节省空间.当我这样做时,我得到了这个错误.

链接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

Chi*_*ang 37

LIBRARY_OUTPUT_DIRECTORY目标属性指定库的目标文件将建成的目录.

set_target_properties(JE3D PROPERTIES
         LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/out/library)
Run Code Online (Sandbox Code Playgroud)

如果所有库都在一个目录中,我发现设置CMAKE_LIBRARY_OUTPUT_DIRECTORY变量更方便,该变量用于LIBRARY_OUTPUT_DIRECTORY在创建目标时初始化属性.

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/out/library)
Run Code Online (Sandbox Code Playgroud)

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

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