假设我有一个带有伪标准目录布局的简单hello项目
helloworld/
src/
main.c
say.c
say-helper.c
include/
say.h
say-helper.h
build/
Run Code Online (Sandbox Code Playgroud)
然后跑了
cd ~/helloworld/build
cmake ..
make
Run Code Online (Sandbox Code Playgroud)
我希望如下
helloworld/
build/lib/
libsay.a
libsay.so
libsay.so.1.0.0
tmp/obj/
main.o
say.o
build/bin/
hello
Run Code Online (Sandbox Code Playgroud)
在make install我期待之后
/usr/local/lib/
libsay.a
libsay.so
libsay.so.1.0.0
/usr/local/bin/
hello
Run Code Online (Sandbox Code Playgroud)
将在什么CMakeLists.txt样子,对于这种设置?
我一直在寻找示例,但我发现的唯一一个显示如何添加库和可执行文件不起作用.
描述项目的基本命令:
INCLUDE_DIRECTORIES(include)
ADD_LIBRARY(say src/say.c src/say-helper.c)
ADD_EXECUTABLE(hello src/main.c)
TARGET_LINK_LIBRARIES(hello say)
Run Code Online (Sandbox Code Playgroud)
这是为了将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)
Run Code Online (Sandbox Code Playgroud)
对于安装,您指定
install(TARGETS say hello
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
Run Code Online (Sandbox Code Playgroud)
在您的CMakeLists.txt中,并在您的配置中将CMAKE_INSTALL_PREFIX设置为/ usr/local.
我不确定你是否可以使用相同的名称同时构建静态和动态库.而且我不知道如何告诉CMake将obj文件放在某个特定的位置.
| 归档时间: |
|
| 查看次数: |
1373 次 |
| 最近记录: |