假设我有一个带有伪标准目录布局的简单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
会是什么样的?
我一直在寻找示例,但我发现的唯一一个显示如何添加库和可执行文件不起作用。
答案 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文件放在某个特定的位置。