如果目录名称匹配,则CMake尝试将其链接为可执行文件
我在CMake中遇到了一个恼人的错误,其中存在以下条件:如果目录名称匹配,则CMake尝试将其链接为可执行文件,cmake,Cmake,我在CMake中遇到了一个恼人的错误,其中存在以下条件: 目标名称与定义目标的目录的名称相同 我正在为目标使用RUNTIME\u OUTPUT\u目录属性 在这些情况下,我会得到以下错误: 链接CXX可执行文件。 /usr/bin/ld:无法打开输出文件。:是目录 CMake似乎试图构建一个名为的目标,显然是试图引用当前目录名而不是所需的目标名 这里有一个简单的例子。我的文件树是: /tmp/example$ tree . ├── build └── src ├── CMakeLi
RUNTIME\u OUTPUT\u目录
属性链接CXX可执行文件。
/usr/bin/ld:无法打开输出文件。:是目录
的目标,显然是试图引用当前目录名而不是所需的目标名
这里有一个简单的例子。我的文件树是:
/tmp/example$ tree
.
├── build
└── src
├── CMakeLists.txt
└── hello_world
├── CMakeLists.txt
└── HelloWorld.cpp
src/CMakeLists.txt:
set (ARBITRARY_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
add_subdirectory(hello_world)
src/hello_world:
add_executable(hello_world HelloWorld.cpp)
set_property(TARGET hello_world PROPERTY RUNTIME_OUTPUT_DIRECTORY ${ARBITRARY_OUTPUT_DIR})
…而HelloWorld.cpp
本身就是一个简单的HelloWorld程序,带有main()
方法
我运行:
/tmp/example/build$ cmake ../src/ -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=gcc-4.8 -DCMAKE_CXX_COMPILER=g++-4.8 -G"Unix Makefiles"
/tmp/example/build$ make VERBOSE=1
我得到:
[ 50%] Building CXX object hello_world/CMakeFiles/hello_world.dir/HelloWorld.o
cd /tmp/example/build/hello_world && /usr/bin/g++-4.8 -O3 -DNDEBUG -o CMakeFiles/hello_world.dir/HelloWorld.o -c /tmp/example/src/hello_world/HelloWorld.cpp
[100%] Linking CXX executable .
cd /tmp/example/build/hello_world && /usr/bin/cmake -E cmake_link_script CMakeFiles/hello_world.dir/link.txt --verbose=1
/usr/bin/g++-4.8 -O3 -DNDEBUG CMakeFiles/hello_world.dir/HelloWorld.o -o . -rdynamic
/usr/bin/ld: cannot open output file .: Is a directory
collect2: error: ld returned 1 exit status
如您所见,CMakeFiles/hello\u world.dir/link.txt
将链接目标设置为-o.
,这显然不起作用
这是CMake中的错误,还是我做错了什么?是否有一些解决方法? 我的工具是:
- cmake版本3.5.1
- Ubuntu 16.04 LTS(Xenial Xerus)
- g++-4.8
添加子目录(hello\u world)
,您的顶级生成目录包含hello\u world目录
通过将RUNTIME\u OUTPUT\u DIRECTORY
property设置为顶级生成目录,您希望在其中创建名为hello\u world的可执行文件
但在单个目录中,不可能同时具有同名的文件和目录
您需要重命名子目录或可执行文件,或者更改目录以放置可执行文件。arrg。我没有想到这一点。谢谢:D