2010-09-18 49 views
13

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

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

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

链接CXX静态库lib ../出/ JE3D.a 在/ usr/bin中/ AR:LIB ../出/ JE3D.a:没有这样的文件或目录 化妆[2]:* [LIB ../出/ JE3D.a]错误1个 化妆[1]:* [CMakeFiles /../出/ JE3D.dir /所有]错误2 化妆:*** [全部]错误2

+0

需要更多信息。来自您的CMakeLists.txt的碎片以及来自错误消息的剪切和过去会有所帮助。 – 2010-09-18 22:27:21

+0

好的,我添加了更多信息。 – Jookia 2010-09-18 23:25:19

回答

25

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

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) 

编辑:检查意见,如果你的目标是静态库

+1

您不能仅仅在库名中使用路径组件的原因是因为CMake是简单地将该名称改为获取库名。在您的主机上,它使用'lib $ {FILE} .a'模式,当您尝试使用路径时,该模式不起作用。 – 2010-09-19 13:00:22

+0

啊,我明白了! – Jookia 2010-09-19 14:10:47

+21

LIBRARY_OUTPUT_DIRECTORY不适用于我。根据文档,该属性控制共享库的输出目录。静态库由ARCHIVE_OUTPUT_DIRECTORY属性控制。 – Jarlaxle 2012-11-17 21:25:29