使用“标准”目录布局进行CMake(Linux)

时间:2011-02-11 00:22:04

标签: cmake

假设我有一个带有伪标准目录布局的简单hello项目

helloworld/
  src/
    main.c
    say.c
    say-helper.c
  include/
    say.h
    say-helper.h
  build/

并在运行

之后
cd ~/helloworld/build
cmake ..
make

我希望以下

helloworld/
  build/lib/
    libsay.a
    libsay.so
    libsay.so.1.0.0
  tmp/obj/
    main.o
    say.o
  build/bin/
    hello

make install之后,我希望

/usr/local/lib/
  libsay.a
  libsay.so
  libsay.so.1.0.0
/usr/local/bin/
  hello

此设置的CMakeLists.txt会是什么样的?

我一直在寻找示例,但我发现的唯一一个显示如何添加库和可执行文件不起作用。

1 个答案:

答案 0 :(得分:8)

描述项目的基本命令:

INCLUDE_DIRECTORIES(include)
ADD_LIBRARY(say src/say.c src/say-helper.c)

ADD_EXECUTABLE(hello src/main.c)
TARGET_LINK_LIBRARIES(hello say)

这是为了将libs和可执行文件放在build目录中,把它放在你的CMakeLists.txt中:

SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)

安装时指定

 install(TARGETS say hello
            RUNTIME DESTINATION bin
            LIBRARY DESTINATION lib
            ARCHIVE DESTINATION lib)
在您的CMakeLists.txt中

并在配置中将CMAKE_INSTALL_PREFIX设置为/ usr / local。

我不确定您是否可以使用相同的名称同时构建静态和动态库。而且我不知道如何告诉CMake将obj文件放在某个特定的位置。