【问题标题】:why CMAKE_LIBRARY_OUTPUT_DIRECTORY doesn't work?为什么 CMAKE_LIBRARY_OUTPUT_DIRECTORY 不起作用?
【发布时间】:2016-07-05 11:56:32
【问题描述】:

我想在 bin 子目录上构建静态库,但 cmake 似乎没有做我想做的事。 这是我写的Cmake文件。

cmake_minimum_required(VERSION 3.3)
project(FancyLogger)

set(SOURCE_FILES FancyLogger.cpp)

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)

add_library(FancyLogger STATIC ${SOURCE_FILES})

我做了一个build子目录,在这个子目录下运行cmake ..make,希望在bin库上生成输出静态库。

但是输出还在build目录下,为什么?

这是我的文件树

===== |

| FancyLogger.cpp

| CMakeLists.txt

| /构建

| /bin

【问题讨论】:

    标签: cmake


    【解决方案1】:

    对于静态库,您必须设置CMAKE_ARCHIVE_OUTPUT_DIRECTORY,而不是CMAKE_LIBRARY_OUTPUT_DIRECTORY

    所以你将拥有:

    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
    

    how do I make cmake output into a 'bin' dir?

    顺便说一句,在源目录中创建子文件夹可能不是一个好主意,尤其是以自动化方式。

    【讨论】:

    • 我同意。您应该改用 ${CMAKE_CURRENT_BINARY_DIR}/bin 或 ${CMAKE_BINARY_DIR}/bin
    • @DimitriMerejkowsky 为什么这不是一个好主意。你下面说的不好?设置(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib)。
    • 是的。例如,如果你想为 linux 编译并为 android 交叉编译,你可以有一个 build/linux 和一个 build/android 文件夹,因此你的库应该在 bulid/linux/libbuild/android/lib 中,所以你不需要在同一目录中混合为不同操作系统构建的二进制文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 2019-08-06
    • 2011-08-06
    • 2013-01-18
    • 2012-07-09
    • 2019-10-31
    相关资源
    最近更新 更多